2015-11-12 84 views
2

我一起使用嵌套片段和viewPager。以下是HomeFragment的代码,它是viewPager中的片段之一。 HomeFragment包含另一个片段,称为FeedFragment,它只是一个RecyclerViewFeedFragment内部我正在使用回调接口,通知HomeFragment已成功创建FeedFragment。我遇到的问题是,第一次创建HomeFragmentmListener值设置为HomeFragment的一个实例,位于onCreateView之内,并且所有内容都已正确加载。当我移动到viewPager不同的片段,并返回到HomeFragmentHomeFragmentonCreateView方法被调用,mListener再次设置为HomeFragment实例和onCreateView方法后,从FeedFragment调用,但mListenernull这个时候。Android ViewPager嵌套片段生命周期

以下是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; 
    } 
} 

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

回答