Android-Fragment的TabLayout中的ListView在getActivity上为null

克里斯

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

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

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

我感觉我在处理TabLayout中的片段或在onDestroy()之后将它们取回的方式做错了。

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

MainScreen->提要片段的句柄-> FeedPagerAdapter的更新->随时更新。

谢谢你的帮助。

具有三个片段(Feed,Create和Home)的Main Screen Pager。

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包含两个片段(随时和即将出现)。

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Android Fragment中,i Exclusive()是否与null!= getActivity()相同?

在onResume方法中发布线程后,Android Fragment iFyre返回false,而getActivity为null

Android Fragment中的startActivityForResult()与getActivity()。startActivityForResult()

SharedPreferences 在 Fragment 中显示为 null (Android)

Android TabLayout 在 Fragment 中不起作用

在Android中旋转设备后,Fragment字段为NULL

Fragment中的Android Google Map始终显示SupportMapFragment为null

谷歌地图在 Android 中的 Tab Fragment 上显示为灰色

在Android中,将ListView Fragment替换为Items上的Details Fragment

如何在 Android 上的 TabLayout 中为选择选项卡设置填充

ListView在Fragment中为null

Android Fragment-重新启动应用程序时,getActivity()。runOnUiThread返回null

kotlin Android studio listView 在 Fragment 中

Android - ListView 将用户显示为 null

在Android Studio中为null

Android 在 Fragment 中获取视图返回 Null

在 android 中更新 Fragment 上的数据

Android-getActivity()从dialogFragment返回null

Android Wear Face上的getActivity()在哪里?

Android TabLayout与Fragment的内容重叠

从 ViewPagerAdapter 访问时,Android Fragment 始终为 NULL

getActivity()在Fragment函数中返回null

ScrollView中的ListView在Android上不滚动

在 Android 中的片段上更新 listView

片段Android上ListView中的错误

Android,为listView上色

Android:如何在Fragment中更改ListView项目的值?

Android:从viewPager中的Fragment调用ListView的适配器的getview()

如何在Fragment(Android)中设置自定义ListView?