Kotlin实现ViewPager的左右滑动和listview的简单使用

kotlin初窥:上一篇简单介绍了碎片的填充使用,本篇介绍ViewPager和Fragment的结合使用以及listview的简单使用

效果图:
Kotlin实现ViewPager的左右滑动和listview的简单使用_第1张图片

  • viewpager结合碎片实现左右滑动的布局效果

    1.首先创建布局,这里就不贴代码了,需要看的朋友可以下载 demo查看;布局就是RadioGroup结合ViewPager进行的创建

    2.ViewPagersActivity.kt 代码(代码中有详细的注解,直接上代码):

package com.eq.tanchudemo

import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentPagerAdapter
import android.support.v4.view.ViewPager
import android.support.v7.app.AppCompatActivity
import android.widget.RadioGroup
import kotlinx.android.synthetic.main.activity_view_pagers.*

class ViewPagersActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_view_pagers)
        //获取碎片集合,下面是获取集合的一种写法 也可以使用java代码
        /**
         *下面这两句代码体现了与java的100%交互,可以使用java里面的用法创建集合
        var list = ArrayList()
        list.add(OneFragment())
         */
        val fragmentList = listOf(OneFragment(), TwoFragment(), ThreeFragment())
        //为viewpager设置适配器,kotlin中可以不用findviewbyid ,而是可以直接用设置的id.属性的方式书写
        viewpager.adapter = viewPagerAdapter(supportFragmentManager, fragmentList)
        //为viewpager设置页面滑动监听
        viewpager.setOnPageChangeListener(object : ViewPager.OnPageChangeListener {
            override fun onPageScrollStateChanged(state: Int) {
            }

            override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
            }

            override fun onPageSelected(position: Int) {
                //判断滑动后选择的页面设置相应的RadioButton被选中
                when (position) {
                //这里的btn_one two the 分别是布局中的三个RadioButton的id,直接调用其方法进行设置
                    0 -> btn_one.isChecked = true
                //当只是写btn_one.isChecked获取的是它的选中状态,如果让它 =true 就会默认调用setChecked()方法进行改变状态
                    1 -> btn_two.isChecked = true
                    2 -> btn_the.isChecked = true
                }
            }

        })
        //对RadioGroup设置监听
        btn_group.setOnCheckedChangeListener(object : RadioGroup.OnCheckedChangeListener {
            override fun onCheckedChanged(group: RadioGroup?, checkedId: Int) {
                when (checkedId) {
                //当点击按钮时,调用如下方法选择viewpager要显示的哪个页面
                    R.id.btn_one -> viewpager.setCurrentItem(0, true)
                    R.id.btn_two -> viewpager.setCurrentItem(1, true)
                    R.id.btn_the -> viewpager.setCurrentItem(2, true)
                }
            }
        })
    }

    //是为了设置第一次进入默认选中的按钮
    override fun onStart() {
        super.onStart()
        btn_one.isChecked = true
    }

    //继承 FragmentPagerAdapter 创建适配器,利用主构造函数传值
    class viewPagerAdapter(fm: FragmentManager?, var list: List) : FragmentPagerAdapter(fm) {
        override fun getItem(position: Int): Fragment {
            return list.get(position)
        }

        override fun getCount(): Int {
            return list.size
        }
    }

}
  • Kotlin中listview的简单使用
    在上面的viewpager中第三个碎片布局中含有listview布局。
    在布局中正常添加listview,主要是代码中listview的数据填充,在碎片中代码如下:
package com.eq.tanchudemo


import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import kotlinx.android.synthetic.main.fragment_three.view.*
import java.util.*


/**
 * A simple [Fragment] subclass.
 */
class ThreeFragment : Fragment() {


    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
        val inflate = inflater!!.inflate(R.layout.fragment_three, container, false)
        //初始化数据源
        var data = ArrayList()
        //循环遍历添加数据  i in 0..15 表示循环区间[0,15]前后包括,0-15
        for (i in 0..15){
            data.add("条目 "+ i)
        }
        //给listview设置适配器  ,可直接通过id调用。这里的适配器使用的是系统自带
        inflate.listview.adapter = ArrayAdapter(activity,android.R.layout.simple_expandable_list_item_1,data)
        return inflate
    }

}

到这已经初步的学习使用kotlin实现viewpager的左右切换,和列表的填充。

附上demo地址:http://download.csdn.net/detail/mysupergirl/9870477

希望对一起学习的朋友们有所帮助,代码中有不对的地方请指正。

你可能感兴趣的:(kotlin,android)