【发布时间】:2020-06-05 12:12:20
【问题描述】:
我有一个 viewPager,它包含三个选项卡,即聊天室、秘密聊天和聊天请求。但正如你所看到的,我现在不想在应用程序上进行秘密聊天和请求,所以我已经从 xml 和聊天 activity.kt (Kotlin) 中删除了这些选项卡,并且我只有聊天室,如你所见此活动代码如下。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
param1 = it.getString(ARG_PARAM1)
param2 = it.getString(ARG_PARAM2)
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? =// Inflate the layout for this fragment
inflater.inflate(R.layout.fragment_chat, container, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val viewPager = view.findViewById<ViewPager>(R.id.viewpager)
setupViewPager(viewPager)
}
private fun setupViewPager(viewPager: ViewPager) {
val adapter = ChatAdapter(fragmentManager)
adapter.addFragment(ChatRoomsFragment(), "Chat Rooms")
viewPager.adapter = adapter
}
现在,当我打开聊天时,只显示聊天室标签。这很酷,但是当我在应用程序中移动并返回聊天选项卡时,聊天室布局消失并留下一个空白屏幕。我相信这是因为该选项卡仍然由 viewPager 设置,它仍然希望滚动三个选项卡或/并且因为我在 onViewCreated 中有 viewPager,这意味着每当进程再次访问它时,它想要显示已删除的选项卡?
我认为将 viewPager 与 onCreateView 合并可能会解决我的问题,但我不知道具体如何。我还认为在某处调整 viewPager 类或活动可能会有所帮助,但我不知道该怎么做。
为了清楚我在这个冗长的解释之后想要什么,我想消除 onViewCreated 进程并将该进程应该与 onCreateView 进程合并。如果有办法我可以将所有两个进程直接添加到 onCreate itslef 或 superOnCreate 中,那也很好。如果不符合社区准则,请提供帮助和宽恕。
下面是我删除的包含其他两个选项卡的 xml 和 kt 活动。
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabIndicatorColor="@color/colorAccent"
app:tabSelectedTextColor="@color/theme_primary"
app:tabTextColor="@android:color/darker_gray" />
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
The activity under oncreate view at ChatFragment.kt
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val viewPager = view.findViewById<ViewPager>(R.id.viewpager)
setupViewPager(viewPager)
val tabs = view.findViewById<TabLayout>(R.id.tabs)
tabs.setupWithViewPager(viewPager)
}
private fun setupViewPager(viewPager: ViewPager) {
val adapter = ChatAdapter(fragmentManager)
adapter.addFragment(ChatRoomsFragment(), "Chat Rooms")
adapter.addFragment(PrivateChatFragment(), "Secret Chat")
adapter.addFragment(RequestFragment(), "Chat Requests")
viewPager.adapter = adapter
}
感谢是期待。
【问题讨论】:
标签: kotlin android-viewpager oncreate