【发布时间】:2018-05-19 13:40:12
【问题描述】:
所以我构建了一个应用,其中包含一个带有 4 个不同片段和 4 个不同布局的 BottomNavView。 (主页、书单、最近和下载)
现在我想在第一个 Fragment(即 HomeFragment)中放置 3 个 Tab。我找到了很多关于如何在 AppCompatActivity 中实现 Tabs 的教程,但我想做的是将它们放在 HomeFragment 中。
代码: 目前,我在 activity_main.xml 中有我的 BottomNavView 和 4 个片段(主页、书单、最近、下载)。 然后,我为标签制作了 3 个片段(ForYou、All、New)。
这里是所有文件的 GitHub 链接:https://github.com/Oribakun/tabs-inside-fragment-test
这是我的 fragment_home.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
>
<android.support.design.widget.TabLayout
android:id="@+id/tabs_home"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
app:tabTextColor="#fff"
app:tabBackground="?attr/selectableItemBackground"
app:tabGravity="fill"
app:tabSelectedTextColor="@android:color/white"
app:tabMode="fixed"
/>
<android.support.v4.view.ViewPager
android:id="@+id/view_pager_home"
android:layout_width="match_parent"
android:layout_height="0dp"
/>
</android.support.design.widget.CoordinatorLayout>
这就是我的 HomeFragment 的样子: 我认为这可行,但在第 46 行和第 48 行悬停 firstViewPager 和 tabLayout 时出现错误“无法重新分配 Val”。
package fragment
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.mangami.mangami.*
import android.support.design.widget.TabLayout
import android.support.v4.view.ViewPager
class HomeFragment : Fragment() {
private val tabLayout: TabLayout? = null
private val firstViewPager: ViewPager? = null
/**
* Initialize newInstance for passing parameters
*/
companion object {
fun newInstance(): HomeFragment {
val fragmentHome = HomeFragment()
val args = Bundle()
fragmentHome.arguments = args
return fragmentHome
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val rootView = inflater.inflate(R.layout.fragment_home, container, false)
firstViewPager = rootView.findViewById(R.id.view_pager_home)
tabLayout = rootView.findViewById(R.id.tabs_home)
tabLayout.setupWithViewPager(firstViewPager)
setupViewPager(firstViewPager)
return rootView
}
private fun setupViewPager(viewPager: ViewPager) {
val adapter = HomeFragmentTabAdapter(childFragmentManager)
adapter.addFragment(HomeFragmentForYou(), "For You")
adapter.addFragment(HomeFragmentAll(), "All")
adapter.addFragment(HomeFragmentNew(), "New")
viewPager.adapter = adapter
}
}
我现在的问题是:如何将 Tabs 放入 Fragment 中?
顺便说一句,我在所有事情上都使用 Kotlin。
这几天我一直在寻找一种方法来做到这一点。我确定有一个简单的解决方案,我只是找不到它,所以我指望你!
【问题讨论】:
标签: android android-fragments tabs kotlin