【发布时间】:2019-05-16 04:22:37
【问题描述】:
我的 MainActivity 中有这个方法:
private fun ObtenerFragmentos() {
var event1:Event_1? =null
var event2:Event_2? =null
var event3: Event_3? =null
for(fragment: Fragment in supportFragmentManager.fragments){
if (fragment is Event_1) event1 = fragment
if(fragment is Event_2) event2 = fragment
if(fragment is Event_3) event3 = fragment
}
}
问题是 event3 它始终为 null 并且 supportFragmentManager.fragments.size 总是得到 2 个片段,但是当我运行 apk 时,我可以看到这三个片段并与之交互。
我的课程和 xml:
activity_main3.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:theme="@style/AppTheme1" >
<androidx.viewpager.widget.ViewPager
android:id="@+id/mViewPager"
android:layout_width="match_parent"
android:layout_height="fill_parent"
>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/toolbar_event"
android:background="?attr/colorPrimary"
android:elevation="6dp"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:tabIndicatorColor="@color/colorblanco"
app:tabMode="scrollable"
app:tabSelectedTextColor="@color/colorblanco" />
</androidx.viewpager.widget.ViewPager>
</RelativeLayout>
MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main3)
viewpageradapter = ViewPageAdapter(supportFragmentManager)
mViewPager.adapter = viewpageradapter
tab_layout.setupWithViewPager(mViewPager)
tab_layout.getTabAt(0)!!.setIcon(R.drawable.ic_datos_generales)
tab_layout.getTabAt(1)!!.setIcon(R.drawable.ic_repeat)
tab_layout.getTabAt(2)!!.setIcon(R.drawable.ic_relaciones)
}
这是 ViewPageAdapter 类:
class ViewPageAdapter(fm: androidx.fragment.app.FragmentManager) : androidx.fragment.app.FragmentPagerAdapter(fm) {
override fun getItem(position: Int): androidx.fragment.app.Fragment {
var fragment: androidx.fragment.app.Fragment? = null
when (position) {
0 -> fragment = Event_1()
1 -> fragment = Event_2()
2 -> fragment = Event_3()
}
return fragment!!
}
override fun getCount(): Int {
return 3
}
override fun getPageTitle(position: Int): CharSequence? {
var title: String? = null
if (position == 0) {
title = "Datos Generales"
} else if (position == 1) {
title = "Repeticiones"
} else if (position == 2) {
title = "Relaciones"
}
return title
}
}
而三个片段的代码分别是:
事件_1:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val viewo: View? = inflater.inflate(R.layout.fragment_datos_generales, container, false)
return viewo
}
事件_2:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view: View? = inflater.inflate(R.layout.fragment_repeticiones, container, false)
return view
}
Event_3:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view: View? = inflater.inflate(R.layout.fragment_relaciones, container, false)
return view
}
请大家帮帮我!!对不起我的英语
【问题讨论】:
-
你确定你在任何地方都使用了正确的
androidx.fragment.app.Fragment吗? -
@sanjeev 是的,无处不在
-
也许尝试从片段管理器中检索片段并不是最好的方法。请注意,您在调用 getItem() 时创建了每个片段的新实例 - 您可能会存储每个片段的实例,然后从此处返回预先创建的实例。这样您就可以从活动中访问每个片段(通过适配器)。顺便说一句,您从哪里调用
ObtenerFragmentos()函数 - 例如,在查看选项卡 3 时调用的结果是否相同? -
@ChrisShaw 谢谢,你能告诉我一个方法吗?
标签: android android-fragments kotlin fragmentmanager