Android - Fragment中TabLayout中的ListView在getActivity上获取null

时间:2015-09-11 19:01:55

标签: android listview android-fragments android-listview

在调用onDestroy()之后尝试重新打开应用程序时,我似乎无法在我的两个片段(Anytime和Upcoming)中更新我的ListView,因为它们嵌套在我的MainScreen的ViewPager中的TabLayout中。

当我返回我的应用程序时,我需要使用从服务器获取的数据更新ListViews,并且我的网络逻辑在我的MainScreen类中处理,因此我可以告诉它的孩子要显示什么。

但是,当我调用FeedPagerAdapter的update方法时,我的AnytimeFragment的getActivity()调用通常会返回null。如果我在onCreateView(...)期间调用它,它不会返回null,但是在(加载服务器数据)之后的一段时间内,它确实返回null。但是,如果我在此之后调用onPause和onResume,它将正确显示。

我觉得我在我的TabLayout中如何处理我的片段,或者在onDestroy()之后将它们恢复,我做错了。

这是我在从服务器获取数据后尝试更新AnytimeFragment时使用的流程。

MainScreen - >处理饲料片段 - > FeedPagerAdapter的更新 - >随时更新。

感谢您的帮助。

主屏幕寻呼机,包含三个片段(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,andcoming)。

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片段中。

public void update() {
    // This often returns null.
    if( getActivity() == null )
        return;

    // Update the ListView.

}

1 个答案:

答案 0 :(得分:1)

我发现了如何解决我的问题。

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

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