使用“后退”按钮返回时,ViewPager为空白

时间:2019-01-12 15:57:00

标签: android android-fragments android-viewpager android-fragmentactivity

我的申请非常简单。 O具有1个活动和三个片段。 加载活动时,它将加载包含ViewPager的片段。 我使用ViewPager显示新闻,ViewPager中的第一个片段显示新新闻,第二个片段显示已读新闻。 一切正常,但是当我单击新闻并打开ContentFragment以显示它,然后单击“后退”按钮以使用ViewPager返回片段时,一切正常。 ContentFragment消失,但是带有ViewPager的Fragment保持空白。我调试并确保调用了诸如onCreateView之类的方法,但是片段仍然为空,我很困惑。 怎么了 谢谢

MainActivity

KeyboardNavigation.TabNavigation="None"

启动时,它会显示带有ViewPager的片段

<androidx.drawerlayout.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".activity.MainActivity"
        android:id="@+id/activity_main_layout_id">


    <androidx.coordinatorlayout.widget.CoordinatorLayout android:layout_width="match_parent"
                                                         android:layout_height="match_parent">

        <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/main_content"
        >

        </RelativeLayout>


    </androidx.coordinatorlayout.widget.CoordinatorLayout>


    <com.google.android.material.navigation.NavigationView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:fitsSystemWindows="true"
            android:id="@+id/navigation_view"
    >

        <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/swipe_refresh_layout"
        >

            <androidx.recyclerview.widget.RecyclerView android:layout_width="match_parent"
                                                       android:layout_height="match_parent"
                                                       android:id="@+id/drawer_recycler"
            >


            </androidx.recyclerview.widget.RecyclerView>
        </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

    </com.google.android.material.navigation.NavigationView>


</androidx.drawerlayout.widget.DrawerLayout>

NewsPagerFragment

private fun showList() {
    val fragmentTransaction = supportFragmentManager.beginTransaction()
    val newsPagerFragment = NewsPagerFragment()
    fragmentTransaction.replace(R.id.main_content, newsPagerFragment)
    fragmentTransaction.commit()
}

在ViewPager中用于显示新闻的NewssListDataFragment。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              xmlns:ads="http://schemas.android.com/apk/res-auto"
              android:layout_width="match_parent" android:layout_height="match_parent"
              tools:context=".fragment.NewsPagerFragment"
              android:orientation="vertical"
              android:id="@+id/news_list_fragment">

    <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/swipe_refresh_layout"
    >
        <androidx.viewpager.widget.ViewPager
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/view_pager"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

        </androidx.viewpager.widget.ViewPager>

    </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

    <com.google.android.gms.ads.AdView
            android:id="@+id/adView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            ads:adUnitId="@string/ads_banner_id_test"
            ads:adSize="BANNER"/>

</LinearLayout>

当我们点击一​​些新闻时,它就会呼叫

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              xmlns:app="http://schemas.android.com/apk/res-auto"
              android:layout_width="match_parent" android:layout_height="match_parent"
              tools:context=".fragment.NewsPagerFragment"
              android:orientation="vertical"
              android:id="@+id/news_list_fragment">

    <androidx.recyclerview.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/news_list_recycler"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager">

    </androidx.recyclerview.widget.RecyclerView>

</LinearLayout>

NewsContentFragment

private fun onPreviewNewsClick(news: PostEntity) {       
        val contentFragment = NewsContentFragment()        
        val transaction = fragmentManager.beginTransaction()      
        transaction.replace(R.id.main_content, contentFragment)
        transaction.commit()
    }

0 个答案:

没有答案