当前位置: 首页 > news >正文

kotlin实现viewpager

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

效果图
在这里插入图片描述

step1:

package com.example.flushfragmentdemoimport 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:

package com.example.flushfragmentdemoimport android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroupprivate const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"class FooFragment : Fragment() {private var param1: String? = nullprivate var param2: String? = nulloverride 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 {@JvmStaticfun newInstance(param1: String, param2: String) =FooFragment().apply {arguments = Bundle().apply {putString(ARG_PARAM1, param1)putString(ARG_PARAM2, param2)}}}
}

step3:

package com.example.flushfragmentdemoimport android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflaterimport 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 fragmentreturn 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:

<?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"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><com.google.android.material.appbar.AppBarLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"><com.google.android.material.tabs.TabLayoutandroid: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.ViewPager2android:id="@+id/mainViewPager"android:layout_width="match_parent"android:layout_height="match_parent"app:layout_anchorGravity="bottom" /></LinearLayout></androidx.constraintlayout.widget.ConstraintLayout>

step5:

<?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 --><TextViewandroid: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:

<?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 --><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:text="player"android:textSize="30sp" /></FrameLayout>

end

http://www.lryc.cn/news/468915.html

相关文章:

  • RabbitMQ最新版本4.0.2在Windows下的安装及使用
  • 东方博宜1180 - 数字出现次数
  • LeetCode: 3274. 检查棋盘方格颜色是否相同
  • datax编译并测试
  • 2-133 基于matlab的粒子群算法PSO优化BP神经网络
  • 复盘秋招22场面试(四)形势重新评估与后续措施
  • 揭开C++ STL的神秘面纱之string:提升编程效率的秘密武器
  • 用人工智能,应该怎么掏钱?
  • 【Axure高保真原型】移动案例
  • Bytebase 3.0.0 - AI 助手全面升级
  • php基础:数据类型、常量、字符串
  • Discuz发布原创AI帖子内容生成:起尔 | AI原创帖子内容生成插件开发定制
  • el-table在某些条件下禁止选中
  • 深入探讨 HTTP 请求方法:GET、POST、PUT、DELETE 的实用指南
  • 深度学习:元学习(Meta-Learning)详解
  • uniapp展示本地pdf + 自定义标题
  • 国标GB28181设备管理软件EasyGBS国标GB28181-2016平台更换SQLite数据库的步骤
  • C++基础与实用技巧第三节:内存管理与性能优化
  • 【移动应用开发】界面设计(二)实现水果列表页面
  • 基于Multisim的四人智力竞赛抢答器设计与仿真
  • 前端学习---(4)js基础-2
  • 重生之“我打数据结构,真的假的?”--3.栈和队列(无习题)
  • 《Python游戏编程入门》注-第2章2
  • PoissonRecon学习笔记
  • 腾讯云DBA面试(一面)
  • Python:背景知识及环境安装
  • 力扣第420周赛 中等 3324. 出现在屏幕上的字符串序列
  • ant design vue树选择器实现部分层级禁用(指定层级或依据字段判断)
  • 安灯系统助力汽车零部件工厂快速解决生产异常
  • vue父子传参的方式——Prop