Kotlin学习笔记——TabLayout

1
#define 小毛驴 xml

使用场景

如果想让ViewPager的tab标签和Toolbar合二为一的话,可以在Toolbar中嵌套TabLayout

使用方法

  1. 编写好小毛驴文件,把TabLayout嵌套到Toolbar中,编写好每一页的小毛驴布局文件,写好传递数据的类
  2. 编写Fragment
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    class BlankFragment : Fragment() {
    var ctx:Context? = null
    var mPosition:Int = 0
    var mInageId:Int = 0
    var mDesc:String = ""
    var title:String = ""

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    ctx = activity
    if (arguments != null) {
    mPosition = arguments!!.getInt("position", 0)
    mInageId = arguments!!.getInt("image_id", 0)
    mDesc = arguments!!.getString("desc")
    title = arguments!!.getString("title")
    }
    val view = inflater.inflate(R.layout.item, container, false)

    val pic:ImageView = view.findViewById(R.id.imageView)
    val desc:TextView = view.findViewById(R.id.textView)

    pic.setImageResource(mInageId)
    desc.text = mDesc
    return view
    }

    companion object {
    fun newInstance(position:Int, image_id:Int, desc:String, title:String) : BlankFragment {
    val fragment = BlankFragment()
    val bundle = Bundle()
    bundle.putInt("position", position)
    bundle.putInt("image_id", image_id)
    bundle.putString("desc", desc)
    bundle.putString("title", title)
    fragment.arguments = bundle
    return fragment
    }
    }
    }
  3. 编写ViewPager的适配器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class infoPagerAdapter(val fragManger: FragmentManager, val itemList:MutableList<itemInfo>) : FragmentStatePagerAdapter(fragManger) {
    override fun getCount(): Int = itemList.size
    override fun getItem(p0: Int): Fragment {
    val item = itemList[p0]
    return BlankFragment.newInstance(p0, item.pic, item.desc, item.name)
    }

    override fun getPageTitle(position: Int): CharSequence? {
    return itemList[position].name
    }
    }
  4. 给ViewPager添加适配器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    class the_pics : AppCompatActivity() , TabLayout.OnTabSelectedListener {

    override fun onTabReselected(p0: TabLayout.Tab?) {}

    override fun onTabUnselected(p0: TabLayout.Tab?) {

    }

    override fun onTabSelected(p0: TabLayout.Tab?) {
    if (p0 != null)
    vp.currentItem = p0.position
    //如果用户点击了某个标签,把下面ViewPager也滚动到相应位置
    //以上三个重载函数都是Toolbar上的标签产生事件后相应的操作
    }

    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_the_pics)
    val bar:android.support.v7.widget.Toolbar = findViewById(R.id.bar)
    setSupportActionBar(bar)
    supportActionBar?.title = ""
    bar.setNavigationOnClickListener {
    setResult(Activity.RESULT_OK)
    finish()
    }//设置Toolbar的返回导航键的click监听器

    var data:MutableList<itemInfo> = mutableListOf()
    /*省略data的赋值过程*/

    tab_title.addOnTabSelectedListener(this)
    vp.adapter = infoPagerAdapter(supportFragmentManager, data)

    vp.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() {
    override fun onPageSelected(position: Int) {
    tab_title.getTabAt(position)!!.select()//让标签栏的第position个变成被选择状态
    //这个重载函数是ViewPager上有Page的改变后调用的函数
    }
    })
    }
    }
作者

Meow Meow Liu

发布于

2019-04-12

更新于

2025-04-15

许可协议

评论