kotlin实现viewpager

说明:kotlin + tablayout + viewpager + adapter实现滑动界面

效果图

step1:

java 复制代码
package com.example.flushfragmentdemo



import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import kotlinx.android.synthetic.main.activity_main.*

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

        val fragments = ArrayList<Fragment>()
        fragments.add(FooFragment())
        fragments.add(PlayerFragment(""))



        mainViewPager.apply {
            adapter = object :FragmentStateAdapter(this@MainActivity){
                override fun getItemCount(): Int {
                    return 2
                }

                override fun createFragment(position: Int): Fragment {
                    return fragments[position]
                }
            }
            setCurrentItem(1,false)
        }

        TabLayoutMediator(tabLayout,mainViewPager){ tab: TabLayout.Tab, i: Int ->
            when (i) {
                0 -> tab.text = "fpp"
                1 -> tab.text = "player"
            }
        }.attach()
    }
}

step2:

java 复制代码
package com.example.flushfragmentdemo


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

private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"


class FooFragment : Fragment() {
    private var param1: String? = null
    private var param2: String? = null

    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? {
        return inflater.inflate(R.layout.fragment_foo, container, false)
    }

    companion object {
        @JvmStatic
        fun newInstance(param1: String, param2: String) =
            FooFragment().apply {
                arguments = Bundle().apply {
                    putString(ARG_PARAM1, param1)
                    putString(ARG_PARAM2, param2)
                }
            }
    }
}

step3:

java 复制代码
package com.example.flushfragmentdemo


import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
 
import android.view.View
import android.view.ViewGroup
import kotlinx.android.synthetic.main.fragment_player.*

class PlayerFragment(private val url:String) : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_player, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)



    }

    override fun onResume() {
        super.onResume()

    }

    override fun onPause() {
        super.onPause()
    }
}

step4:

html 复制代码
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <com.google.android.material.appbar.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

            <com.google.android.material.tabs.TabLayout
                android:id="@+id/tabLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabIndicatorColor="@android:color/white" />
        </com.google.android.material.appbar.AppBarLayout>

        <androidx.viewpager2.widget.ViewPager2
            android:id="@+id/mainViewPager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_anchorGravity="bottom" />
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

step5:

html 复制代码
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
    android:background="@android:color/holo_green_dark"
    tools:context=".FooFragment">

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:background="@android:color/holo_red_dark"
        android:text="fpp"
        android:textSize="30sp" />

</FrameLayout>

step6:

html 复制代码
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
    android:background="@android:color/holo_orange_dark"
    tools:context=".FooFragment">

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="player"
        android:textSize="30sp" />

</FrameLayout>

end

相关推荐
倒悬于世几秒前
JVM-类加载详情
java·开发语言·jvm
安卓开发者11 分钟前
驾驭复杂表单:用 RxJava 实现响应式表单处理
android·rxjava
一笑的小酒馆12 分钟前
Android使用Compose实现简单微信朋友圈
android
xiangxiongfly9152 小时前
Android 圆形和圆角矩形总结
android·圆形·圆角·imageview
Hy行者勇哥2 小时前
Python 与 VS Code 结合操作指南
开发语言·python
幻雨様7 小时前
UE5多人MOBA+GAS 45、制作冲刺技能
android·ue5
麦兜*8 小时前
Swift + Xcode 开发环境搭建终极指南
开发语言·ios·swiftui·xcode·swift·苹果vision pro·swift5.6.3
Jerry说前后端9 小时前
Android 数据可视化开发:从技术选型到性能优化
android·信息可视化·性能优化
萧鼎10 小时前
Python pyzmq 库详解:从入门到高性能分布式通信
开发语言·分布式·python
Meteors.10 小时前
Android约束布局(ConstraintLayout)常用属性
android