如何将我的onViewCreated合并到同时包含布局片段和Viewpager的onCreateView中

问题描述 投票:0回答:1

我有一个viewPager,其中包含三个选项卡,即聊天室,秘密聊天和聊天请求。但是正如您所看到的,我不希望在应用程序上进行秘密聊天并立即请求,因此我从xml和chat 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设置,而该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
1个回答
0
投票

通过将聊天室片段kt中的方法转移到聊天片段kt上来解决,因为当我拥有三个标签时,聊天片段是托管所有标签的活动。现在,它仅托管“聊天室”选项卡,因此,聊天室片段活动方法与聊天片段活动方法几乎是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.