猿问

在viewpager中获取当前片段实例

下面是我的代码3 Fragment classes每一个嵌入了三个制表符中的每一个ViewPager..我有菜单选项。如onOptionsItemSelected(),通过选择一个选项,我需要更新当前可见的片段。要更新,我必须调用片段类中的方法。有人能建议怎么称呼这种方法吗?

public class MainActivity  extends ActionBarActivity {

     ViewPager ViewPager;
     TabsAdapter TabsAdapter;

     @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            ViewPager = new ViewPager(this);
            ViewPager.setId(R.id.pager);
            setContentView(ViewPager);

            final ActionBar bar = getSupportActionBar();

            bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

            //Attaching the Tabs to the fragment classes and setting the tab title.
            TabsAdapter = new TabsAdapter(this, ViewPager);
            TabsAdapter.addTab(bar.newTab().setText("FragmentClass1"),
                    FragmentClass1.class, null);
            TabsAdapter.addTab(bar.newTab().setText("FragmentClass2"),
              FragmentClass2.class, null);
            TabsAdapter.addTab(bar.newTab().setText("FragmentClass3"),
              FragmentClass3.class, null);


            if (savedInstanceState != null) {
                bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
            }

        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {

            switch (item.getItemId()) {

            case R.id.addText:

           **// Here I need to call the method which exists in the currently visible Fragment class**

                    return true;

            }

            return super.onOptionsItemSelected(item);
        }


     @Override
     protected void onSaveInstanceState(Bundle outState) {
      super.onSaveInstanceState(outState);
            outState.putInt("tab", getSupportActionBar().getSelectedNavigationIndex());

     }
茅侃侃
浏览 747回答 3
3回答

宝慕林4294392

 public class MyPagerAdapter extends FragmentPagerAdapter {         private Fragment mCurrentFragment;         public Fragment getCurrentFragment() {             return mCurrentFragment;         }//...             @Override         public void setPrimaryItem(ViewGroup container, int position, Object object) {             if (getCurrentFragment() != object) {                 mCurrentFragment = ((Fragment) object);             }             super.setPrimaryItem(container, position, object);         }     }

蝴蝶不菲

首先,跟踪所有“活动”片段页。在这种情况下,您可以跟踪FragmentStatePagerAdapter中的片段页,它是由ViewPager使用的。@Overridepublic Fragment getItem(int index) {     Fragment myFragment = MyFragment.newInstance();     mPageReferenceMap.put(index, myFragment);     return myFragment;}为了避免对“非活动”片段页的引用,需要实现FragmentStatePagerAdapter的deadyItem(.)方法:@Overridepublic void destroyItem (ViewGroup container, int position, Object object) {     super.destroyItem(container, position, object);     mPageReferenceMap.remove(position);}当您需要访问当前可见页时,您可以调用:int index = mViewPager.getCurrentItem();MyAdapter adapter = ((MyAdapter)mViewPager.getAdapter());MyFragment fragment = adapter.getFragment(index);MyAdapter的getFrage(Int)方法如下所示:public MyFragment getFragment(int key) {     return mPageReferenceMap.get(key);}希望能帮上忙!
随时随地看视频慕课网APP

相关分类

Android
我要回答