1

In my MainActivity I have Transaction my MainFragment.

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

at my MainFragment I'm using a ViewPager together with a FragmentStatePagerAdapter to host My fragment.

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

and in my 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;

according this link I write this commend into main fragment:

                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;

but page retrieve null!! what is you suggestion? I am using this tutorial

I still got null.

NotificationFragment fragment = (NotificationFragment) mPagerAdapter.getRegisteredFragment(0);
sayres
  • 361
  • 1
  • 4
  • 15

1 Answers1

0

Instead of using activities fragment manager, use ChildFragmentManager in your MainFragment

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

And to get the fragment use the child fragment manager

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

Remember: ViewPager adds and removes fragment based on its current position I would suggest to keep all the fragment instance in the adapter as an ArrayList and retrive them when you need it based on the position index

Samuel Robert
  • 10,106
  • 7
  • 39
  • 60