为了账号安全,请及时绑定邮箱和手机立即绑定

在viewpager中获取当前片段实例

在viewpager中获取当前片段实例

茅侃侃 2019-06-29 17:54:21
下面是我的代码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());      }
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

 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);
        }
    }



查看完整回答
反对 回复 2019-06-29
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

首先,跟踪所有“活动”片段页。在这种情况下,您可以跟踪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);}

希望能帮上忙!


查看完整回答
反对 回复 2019-06-29
  • 3 回答
  • 0 关注
  • 746 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信