尝试在调用onDestroy()之后重新打开应用程序时,我似乎无法更新两个Fragment(随时和即将来临)中的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.
}
我找到了解决问题的方法。
首先,我在Feed类中重新创建了FeedPagerAdapter onResume。我注意到它调用Anytime.update()的次数比我想要的多。
其次,我将Anytime Fragment中的listView更改为静态,因为有时为null。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句