从ViewPager Android获取片段

时间:2017-08-19 05:13:20

标签: android-fragments android-viewpager

在我的MainActivity中,我有Transaction my MainFragment。

MainFragment mainFragment = new MainFragment();
getSupportFragmentManager().beginTransaction()
            .replace(R.id.fragment_holder, mainFragment)
            .addToBackStack(mainFragment.getClass().getName())
            .commit();

在我的MainFragment中,我正在使用ViewPager和FragmentStatePagerAdapter来托管My片段。

public class TaskPagerAdapter extends FragmentStatePagerAdapter {

private String cookieString = null;

private String userString = null;

public TaskPagerAdapter(FragmentManager fm, Cookie cookie) {
    super(fm);
    this.cookieString = HttpUtil.serializeCookie(cookie);
}

@Override
public Fragment getItem(int position) {
    Fragment fragment = null;

    switch (position) {
        case 0:
            fragment = new NotificationFragment();
            break;
//            case 1:
//                break;
//            case 2:
//                break;
//            case 3:
//                break;
//            case 4:
//                break;

    }
    return fragment;
}

@Override
public int getCount() {
    return 1;
}

@Override
public CharSequence getPageTitle(int position) {
    return new String[]{"رویدادها", "توضیحات", "فرم ها"}[position];
}

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}
}

并在我的MainFragment中:

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_main, container, false);
   ButterKnife.bind(this, rootView);
        mPagerAdapter = new TaskPagerAdapter(getFragmentManager(),cookie);
    mViewPager.setAdapter(mPagerAdapter);
    mViewPager.setCurrentItem(0);
  return rootView;

根据这个link我把这个推荐写入主要片段:

                mViewPager.setCurrentItem(0);


    Fragment page = getActivity().getSupportFragmentManager().findFragmentByTag("android:switcher:" +
            R.id.pager + ":" + mViewPager.getCurrentItem());
    NotificationFragment fragment = (NotificationFragment) page;
    fragment.setNotificationCallBack(this);


    mCountNotifyTask.getCountNotifyTask();
    return rootView;

但页面检索为空 !!你有什么建议吗? 我正在使用this tutorial

我仍然无效。

NotificationFragment fragment = (NotificationFragment) mPagerAdapter.getRegisteredFragment(0);

1 个答案:

答案 0 :(得分:0)

不使用活动片段管理器,而是在MainFragment中使用ChildFragmentManager

x86

要获取片段,请使用子片段管理器

 mPagerAdapter = new TaskPagerAdapter(getChildFragmentManager(),cookie);
 mViewPager.setAdapter(mPagerAdapter);
 mViewPager.setCurrentItem(0);

请记住: ViewPager根据当前位置添加和删除片段 我建议将适配器中的所有片段实例保存为ArrayList,并在需要时根据位置索引检索它们