Android ViewPager嵌套片段生命周期
我将嵌套片段和viewPager一起使用。以下是我的Android ViewPager嵌套片段生命周期,android,android-viewpager,android-nested-fragment,Android,Android Viewpager,Android Nested Fragment,我将嵌套片段和viewPager一起使用。以下是我的HomeFragment代码,它是viewPager中的片段之一HomeFragment保存另一个名为FeedFragment的片段,它只是一个RecyclerView。在FeedFragment内部,我正在使用一个回调接口,通知HomeFragment已成功创建FeedFragment。我遇到的问题是,第一次创建HomeFragment时,mListener值被设置为HomeFragment内部onCreateView的实例,并且所有内容都被
HomeFragment
代码,它是viewPager中的片段之一HomeFragment
保存另一个名为FeedFragment
的片段,它只是一个RecyclerView
。在FeedFragment
内部,我正在使用一个回调接口,通知HomeFragment
已成功创建FeedFragment
。我遇到的问题是,第一次创建HomeFragment
时,mListener
值被设置为HomeFragment
内部onCreateView
的实例,并且所有内容都被正确加载。当我移动到viewPager中的另一个片段并返回到HomeFragment
时,HomeFragment
onCreateView
方法被调用,mListener
再次被设置为HomeFragment
的一个实例,然后从FeedFragment
调用onCreateView
方法,但mListener
这次是null
以下是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);
}
}