在我的应用程序中,我试图用ViewPagers 创建2个片段.这些片段有3个标签/页面,每个标签都带有RecyclerViews,它们应该由数据库支持,所以我将它们保存在一个List.
class MainActivity : AppCompatActivity() {
val fragments = listOf(SwipeFragment(), SwipeFragment())
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
supportFragmentManager.beginTransaction().replace(R.id.placeholder, fragments[0]).commit()
button1.setOnClickListener {
supportFragmentManager.beginTransaction().replace(R.id.placeholder, fragments[0]).commit()
}
button2.setOnClickListener {
supportFragmentManager.beginTransaction().replace(R.id.placeholder, fragments[1]).commit()
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,在远离SwipeFragment和返回之后,视图似乎是空的.然后,如果你导航到例如最左边的页面,最右边的一个"出现"(当你去它时).这导致中间页面保持空白.(它是说,之所以FragmentStatePagerAdapter在默认情况下只能保存当前页面和2点相邻的中间一个不与3个标签得到刷新的布局-我试了一下还与5个标签页,我能够把所有的他们来回走动).
经过一些调试后,我看到代表页面的片段没有被删除FragmentManager,但主要SwipeFragment是.FragmentManager即使在阅读了几乎所有的源代码之后,我也无法理解它是如何工作的.
如果我能以某种方式安全地从中删除碎片FragmentManager,它可能会起作用.
我已经尝试了一些保存状态的技术,但框架会自动执行(实际上可能是导致此问题的原因).
我只是Android的初学者,所以无论如何都可能有更好的方法.我将把剩下的文件留在这里作为参考.
activity_main.xml中
<LinearLayout 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"
android:orientation="vertical"
tools:context="com.example.test.MainActivity">
<FrameLayout
android:id="@+id/placeholder"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:orientation="horizontal">
<Button
android:id="@+id/button1"
style="?android:buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content" …Run Code Online (Sandbox Code Playgroud) android android-fragments android-viewpager kotlin fragmentmanager