【问题标题】:How do I merge my onViewCreated into onCreateView that contains both layout fragment and Viewpager如何将我的 onViewCreated 合并到包含布局片段和 Viewpager 的 onCreateView
【发布时间】: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


    【解决方案1】:

    通过将聊天室片段 kt 中的方法转移到聊天片段 kt 来解决这个问题,因为当我有三个标签时,聊天片段是托管所有标签的活动。现在,它只托管聊天室选项卡,所以聊天室片段活动方法与聊天片段活动方法几乎相同是正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      相关资源
      最近更新 更多