Как я могу объединить нижний вид навигации, Tablayout и Viewpager в Android Kotlin? - PullRequest
2 голосов
/ 27 октября 2019

Я пытался объединить нижнюю навигационную панель, tablayout и viewpager. У меня уже есть tableyout, работающий с viewpager, но при выборе другого элемента (отличного от того, который содержит tableyout) из нижнего навигационного окна ничего не происходит, и кажется, что они были отключены. Я не знаю, что я делаю не так. Я новичок в Android.

Я хочу что-то вроде этого:

i want something like this.

MainActivity.kt

class MainActivity : AppCompatActivity() {

private val onNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
    when (item.itemId) {
        R.id.navigation_data_sheet -> {
            replaceFragment(DataSheetFragment())
            return@OnNavigationItemSelectedListener true
        }
        R.id.navigation_search -> {
            replaceFragment(SearchFragment())
            return@OnNavigationItemSelectedListener true
        }
        R.id.navigation_notifications -> {
            replaceFragment(NotificationsFragment())
            return@OnNavigationItemSelectedListener true
        }
        R.id.navigation_profile -> {
            val intent = Intent(this@MainActivity, NoLoginActivity::class.java)
            startActivity(intent)
            finish()
            return@OnNavigationItemSelectedListener true
        }
    }
    false
}

private fun replaceFragment(fragment: Fragment) {
    val fragmentTransition = supportFragmentManager.beginTransaction()
    fragmentTransition.replace(R.id.fragmentContainer, fragment)
    fragmentTransition.commit()
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    replaceFragment(DataSheetFragment())

    val navView: BottomNavigationView = findViewById(R.id.bottom_navigation)
    navView.setOnNavigationItemSelectedListener(onNavigationItemSelectedListener)
}}

PagerAdapter.kt

class PagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) {

override fun getItem(position: Int): Fragment {
    return when (position) {
        0 -> {
            SpecimensFragment()
        }
        else -> {
            return FungiFragment()
        }
    }
}

override fun getCount(): Int {
    return 2
}

override fun getPageTitle(position: Int): CharSequence {

    return when (position) {
        0 -> "Especímenes"
        else -> {
            return "Hongos"
        }
    }
}}

DataSheetFragment.kt: Фрагмент очереди таблицы

class DataSheetFragment : Fragment() {

private lateinit var viewPager: ViewPager
private lateinit var tabs: TabLayout

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val view: View = inflater.inflate(R.layout.fragment_data_sheet, container, false)

    viewPager = view.findViewById(R.id.viewPager)
    tabs = view.findViewById(R.id.data_sheet_tabs)

    val fragmentAdapter = PagerAdapter(childFragmentManager)
    viewPager.adapter = fragmentAdapter
    tabs.setupWithViewPager(viewPager)

    return view
}}

frag_data_sheet.xml

    <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".Fragments.DataSheetFragment"
    >

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:title="@string/data_sheet"
        app:titleTextColor="@color/white"
        android:background="@color/colorPrimary"
    >

    </androidx.appcompat.widget.Toolbar>

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/data_sheet_tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/toolbar"
        android:background="@color/background_color"
        app:tabTextAppearance="@style/TabLayoutTextAppearance"
    >

        <com.google.android.material.tabs.TabItem
            android:id="@+id/specimens_tab"
            android:text="@string/specimens"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
        />

        <com.google.android.material.tabs.TabItem
            android:id="@+id/fungi_tab"
            android:text="@string/fungi"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
        />

    </com.google.android.material.tabs.TabLayout>

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/data_sheet_tabs"
    />

</androidx.constraintlayout.widget.ConstraintLayout>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...