2

I am using nested fragments and viewPager together. Following is my code for HomeFragment which is one of the fragments in viewPager. HomeFragment holds another fragment called FeedFragment which is just a RecyclerView. Inside FeedFragment I am using a callback interface which notifies HomeFragment that FeedFragment was successfully created. The problem I am having is, first time HomeFragment is created, mListener value is set to an instance of HomeFragment inside onCreateView and everything is loaded properly. When I move to a different fragment in viewPager and go back to HomeFragment, HomeFragment onCreateView method is called and mListener is again set to an instance of HomeFragment and after that onCreateView method is called from FeedFragment but mListener is null this time.

Following is the code for FeedFragment:

public class FeedFragment extends Fragment {

    RecyclerView feedRecyclerView;
    FeedRecyclerViewAdapter feedRecyclerViewAdapter;
    private OnCompleteListener mListener;

    public FeedFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_feed, container, false);

        feedRecyclerView = (RecyclerView) view.findViewById(R.id.postFeedItemContainer);
        feedRecyclerViewAdapter = new FeedRecyclerViewAdapter(getActivity());
        feedRecyclerView.setAdapter(feedRecyclerViewAdapter);
        feedRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

        mListener.onComplete(feedRecyclerViewAdapter, this);

        return view;
    }

    public interface OnCompleteListener {
        void onComplete(
                FeedRecyclerViewAdapter feedRecyclerViewAdapter, FeedFragment feedFragment);
    }

    public void setmListener(OnCompleteListener mListener) {
        this.mListener = mListener;
    }
}

Following is the code for HomeFragment:

public class HomeFragment extends Fragment implements FeedFragment.OnCompleteListener {

    // presenter instance
    private HomeFragmentPresenter homeFragmentPresenter = HomeFragmentPresenter.getInstance();

    public HomeFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction();
        FeedFragment feedFragment = new FeedFragment();
        feedFragment.setmListener(this);
        fragmentTransaction.add(R.id.fragmentHomeFeedContainer, feedFragment);
        fragmentTransaction.commit();

        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_home, container, false);
    }

    @Override
    public void onComplete(FeedRecyclerViewAdapter feedRecyclerViewAdapter, FeedFragment feedFragment) {
        homeFragmentPresenter.fetchDataForAdapter(feedRecyclerViewAdapter, feedFragment);
    }
}
Sohail
  • 1,137
  • 2
  • 12
  • 22

0 Answers0