Kotlin:FragmentPagerAdapter不会更改ViewPager的布局

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

我正在尝试通过适配器类为我的Android应用程序创建表格布局。但是,当我单击其他选项卡时,ViewPager中表示的布局不会更改。下面是我的代码:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    tools:context=".MainActivity">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay"/>

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#ffffff"
            tools:context=".MainActivity"
            app:tabTextAppearance="@style/MyCustomTextAppearance"
            >

            <!-- The tabular layout -->
            <com.google.android.material.tabs.TabLayout
                android:id="@+id/tablayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                android:textAllCaps="false"
                android:background="#ffffff"
                >

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

            <!-- Contains the fragment corresponding to each tab -->
            <androidx.viewpager.widget.ViewPager
                android:id="@+id/viewPager"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                />
        </androidx.constraintlayout.widget.ConstraintLayout>
    </ScrollView>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

[total_fragment.xmlindividual_fragment.xmlusage_fragment.xml都是非常基本的布局,其中只有TextView

下面是我的Kotlin代码(MainActivity.kt):

import PageAdapter
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import android.util.Log
import androidx.viewpager.widget.ViewPager
import com.google.android.material.tabs.TabLayout

var tabLayout: TabLayout? = null
var viewPagerReference: ViewPager? = null

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

        tabLayout = findViewById<TabLayout>(R.id.tablayout)
        viewPagerReference = findViewById<ViewPager>(R.id.viewPager)

        tabLayout!!.addTab(tabLayout!!.newTab().setText("TabA"))
        tabLayout!!.addTab(tabLayout!!.newTab().setText("TabB"))
        tabLayout!!.addTab(tabLayout!!.newTab().setText("TabC"))
        tabLayout!!.tabGravity = TabLayout.GRAVITY_FILL

        val adapter = PageAdapter(this, supportFragmentManager, tabLayout!!.tabCount)
        viewPager!!.adapter = adapter

        viewPager!!.addOnPageChangeListener(TabLayout.TabLayoutOnPageChangeListener(tabLayout))

        tabLayout!!.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
            override fun onTabSelected(tab: TabLayout.Tab) {
                Log.i("TextStats","NEW TAB SELECTED: " + tab.position)
                viewPager!!.currentItem = tab.position
            }
            override fun onTabUnselected(tab: TabLayout.Tab) {
            }
            override fun onTabReselected(tab: TabLayout.Tab) {
            }
        })
    }
}

对于适配器类(PageAdapter.kt):

import android.content.Context
import android.util.Log
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import com.example.textstats.IndividualFragment
import com.example.textstats.TotalFragment
import com.example.textstats.UsageFragment

class PageAdapter(private val myContext: Context, fm: FragmentManager, internal var totalTabs: Int) : FragmentPagerAdapter(fm) {

    // this is for fragment tabs
    override fun getItem(position: Int): Fragment? {
        Log.i("TextStats", "POSITION = " + position);
        when (position) {
            0 -> {
                //  val homeFragment: HomeFragment = HomeFragment()
                return TotalFragment()
            }
            1 -> {
                return IndividualFragment()
            }
            2 -> {
                // val movieFragment = MovieFragment()
                return UsageFragment()
            }
            else -> return null
        }
    }

    // this counts total number of tabs
    override fun getCount(): Int {
        return totalTabs
    }

}

TotalFragmentUsageFragmentIndividualFragment在下面都具有相同的代码,但版面编号不同(R.layout.[layout name]):

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment

class TotalFragment : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater!!.inflate(R.layout.total_fragment, container, false)
    }
}
android android-fragments kotlin
1个回答
1
投票

在设置适配器后添加此行

   tabLayout.setupWithViewPager(viewPager)
© www.soinside.com 2019 - 2024. All rights reserved.