在调用onDestroy()之后尝试重新打开应用程序时,我似乎无法在我的两个片段(Anytime和Upcoming)中更新我的ListView,因为它们嵌套在我的MainScreen的ViewPager中的TabLayout中。
当我返回我的应用程序时,我需要使用从服务器获取的数据更新ListViews,并且我的网络逻辑在我的MainScreen类中处理,因此我可以告诉它的孩子要显示什么。
但是,当我调用FeedPagerAdapter的update方法时,我的AnytimeFragment的getActivity()调用通常会返回null。如果我在onCreateView(...)期间调用它,它不会返回null,但是在(加载服务器数据)之后的一段时间内,它确实返回null。但是,如果我在此之后调用onPause和onResume,它将正确显示。
我觉得我在我的TabLayout中如何处理我的片段,或者在onDestroy()之后将它们恢复,我做错了。
这是我在从服务器获取数据后尝试更新AnytimeFragment时使用的流程。
MainScreen - >处理饲料片段 - > FeedPagerAdapter的更新 - >随时更新。
感谢您的帮助。
private class MainPagerAdapter extends FragmentStatePagerAdapter {
public MainPagerAdapter ( FragmentManager fm ) {
super( fm );
}
@Override
public Fragment getItem( int position ) {
switch ( position ) {
default:
case FEED:
// Child with TabLayout and two Fragments I'm trying to update.
return new Feed();
case CREATE:
return new Create();
case HOME:
return new Home();
}
}
@Override
public int getCount() {
return 3;
}
}
public class FeedPagerAdapter extends FragmentPagerAdapter {
public FeedPagerAdapter ( FragmentManager fm, Context context ) {
super( fm );
this.context = context;
}
@Override
public Fragment getItem( int position ) {
switch ( position ) {
default:
case ANYTIME:
return new AnytimeFragment();
case UPCOMING:
return new UpcomingFragment();
}
}
@Override
public int getCount() {
return 2;
}
public void update() {
( ( AnytimeFragment) getItem( ANYTIME) ).update();
}
}
public void update() {
// This often returns null.
if( getActivity() == null )
return;
// Update the ListView.
}
答案 0 :(得分:1)
我发现了如何解决我的问题。
首先,我在Feed类中重新创建了FeedPagerAdapter onResume。我注意到它会比我想要的更多次调用Anytime.update()。
其次,我将Anytime Fragment中的listView更改为静态,因为它有时为null。