【发布时间】:2015-09-11 19:01:54
【问题描述】:
在调用 onDestroy() 后尝试重新打开应用程序时,我似乎无法在我的两个 Fragment(Anytime 和 Upcoming)中更新我的 ListView,因为它们嵌套在我的 MainScreen 的 ViewPager 中的 TabLayout 中。
当我返回我的应用程序时,我需要使用从服务器获取的数据更新 ListViews,并且我的网络逻辑在我的 MainScreen 类中处理,因此我可以告诉它的孩子要显示什么。
但是,当我调用 FeedPagerAdapter 的更新方法时,我的 AnytimeFragment 的 getActivity() 调用经常返回 null。如果我在 onCreateView(...) 期间调用它,它不会返回 null,但在(加载服务器数据)之后一段时间,它确实返回 null。虽然,如果我在此之后调用 onPause 和 onResume,它会正确显示。
我觉得我在处理 TabLayout 中的 Fragments 或在 onDestroy() 之后取回它们的方式上做错了。
这是我在从服务器获取数据后尝试更新 AnytimeFragment 时使用的流程。
MainScreen -> Feed Fragment 句柄 -> FeedPagerAdapter 的更新 -> Anytime 的更新。
感谢您的帮助。
具有三个片段(Feed、Create 和 Home)的主屏幕分页器。
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;
}
}
Feed TabLayout 包含两个片段(Anytime 和 Upcoming)。
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();
}
}
在我的 Anytime Fragment 中。
public void update() {
// This often returns null.
if( getActivity() == null )
return;
// Update the ListView.
}
【问题讨论】:
标签: android listview android-fragments android-listview