我一起使用嵌套片段和viewPager。以下是HomeFragment
的代码,它是viewPager中的片段之一。 HomeFragment
包含另一个片段,称为FeedFragment
,它只是一个RecyclerView
。 FeedFragment
内部我正在使用回调接口,通知HomeFragment
已成功创建FeedFragment
。我遇到的问题是,第一次创建HomeFragment
,mListener
值设置为HomeFragment
的一个实例,位于onCreateView
之内,并且所有内容都已正确加载。当我移动到viewPager不同的片段,并返回到HomeFragment
,HomeFragment
onCreateView
方法被调用,mListener
再次设置为HomeFragment
实例和onCreateView
方法后,从FeedFragment
调用,但mListener
是null
这个时候。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);
}
}