【问题标题】:Android - ListView in TabLayout in Fragment gets null on getActivityAndroid - 片段中 TabLayout 中的 ListView 在 getActivity 上为空
【发布时间】: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


    【解决方案1】:

    我找到了解决问题的方法。

    首先,我在 Feed 类中重新创建了 FeedPagerAdapter onResume。我注意到它调用 Anytime.update() 的次数比我想要的要多。

    其次,我将 Anytime Fragment 中的 listView 更改为静态,因为它有时为空。

    【讨论】:

      猜你喜欢
      • 2014-02-03
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      相关资源
      最近更新 更多