Kotlin学习笔记十二、Kotlin复杂控件的使用

1、Spinner下拉框:

spinner的spinnerMode属性,spinner显示为对话框(“dialog”)或者是下拉框(“dropdown”)形式;
prompt属性表示spinner列表上方的提示;

android:spinnerMode=["dialog"|"dropdown"]
android:prompt="请选择城市"

但无论是dialog模式还是dropdown模式,在Java里面实现起来都是一长串的代码,但是这要是放到Kotlin下的Anko库里面来看,也就三五行代码的事儿:

var oldData = listOf("金星", "木星", "水星", "火星", "土星", "地球", "天王星", "海王星")
tvSeletor.text = "请选择目标星系"
tvSeletor.setOnClickListener {
	selector("请选择目标星系", oldData){ dialogInterface: DialogInterface, i: Int ->
		tvSeletor.text = oldData[i]
	}
}

在这里插入图片描述

2、RecyclerView
a、概述

RecyclerView的强大这里就不多说了。同样的Kotlin里面RecyclerView的一些API的调用方式跟Java相比,发生了一些变化。在Java中很多方法在Kotlin里面变味了属性赋值的调用方式,这个在前面的学习过程中也出现过。
在这里插入图片描述

b、布局管理器

LayoutManager布局管理器是R二次元吃了肉View的核心和精髓,他不但提供了水平视图、竖直视图、瀑布流视图、网格视图四种布局管理功能,而且可以在代码中随时由循环视图对象通过LayoutManager属性设置新的布局,一旦设置了LayoutManager熟悉,界面就会根据新的布局属性刷新列表。

1)、线性布局管理器LinearLayoutManager:控制视图列表是水平方向显示还是竖直方向显示。

2)、网格布局管理器GridLayoutManager:类似Java以前的GridView那样的网格状的列表。

3)、瀑布流布局管理器StaggereGridLayoutManager:这个在电商APP里面用的特别多,每隔商品的特性或者展示的内容稍有差别,这样每隔item的宽度或者高度就不一致,,这时候如果还用前面提到的两种布局来展示,那么视觉效果上体验很差。开发者只需要在适配器里面动态设置每隔网格item的高度,系统会自动的在界面上一次排列网格。

c、循环适配器RecyclerView.Adapter

RecyclerView.Adapter相比于之前的ListView或者GridView的Adapter有很多的改进:

1)、自带视图持有者ViewHolder并自动实现重用功能,无需开发者手动判断是否重用;

2)、没有自带item的点击和长按事件,需要开发者自己实现;

3)、增加区分不同列表的视图类型,方便开发者根据不同类型加载不同的布局;

4)、可单独对每个item进行删除操作,而无序刷新整个列表。

Activity主代码:

var list : ArrayList<String> = ArrayList()
for (index in 1..20){
	list.add("Hobbes and Stella make love $index${"th"} times")
}
var layoutManager = GridLayoutManager(this, 3)
//线性布局
//var layoutManager = LinearLayoutManager(this)
//网格布局
layoutManager.orientation = LinearLayoutManager.VERTICAL
rvLearn.layoutManager = layoutManager
var mDividerItemDecoration = DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
this.getDrawable(R.drawable.list_divider)?.let { mDividerItemDecoration.setDrawable(it) }
rvLearn.addItemDecoration(mDividerItemDecoration)
rvLearn.itemAnimator = DefaultItemAnimator()
var adapter = KotlinAdapter(this, list)
rvLearn.adapter = adapter

Adapter的代码:

class KotlinAdapter : RecyclerView.Adapter<KotlinAdapter.ViewHolder> {
	private var mContext: Context? =null
	private var list:ArrayList<String>? = null
	constructor(context: Context, arrayList : ArrayList<String>?){
    	mContext = context
    	list = arrayList
	}
	class ViewHolder(itemView:View) : RecyclerView.ViewHolder(itemView) {
    	var tvItem:TextView = itemView!!.findViewById(R.id.tvItem)
	}
	override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    	var view = LayoutInflater.from(mContext).inflate(R.layout.kotlin_adapter, parent, false)
    	return ViewHolder(view)
	}
	override fun getItemCount(): Int {
    	return list?.size!!
	}
	override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    	holder.tvItem.text = list!!.get(position)
    	holder.tvItem.setOnClickListener {
        	println("你点击了第 ${position+1} 个,内容是:${list!!.get(position)}")
    	}
	}
}

Adapter的xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="match_parent"
	android:layout_height="40dp"
	xmlns:tools="http://schemas.android.com/tools">
	<TextView
    	android:id="@+id/tvItem"
    	android:layout_width="match_parent"
    	android:layout_height="match_parent"
    	tools:text="晓晓,老婆"
    	android:gravity="center"
    	android:layout_margin="3dp"
    	android:background="@drawable/main_button_bg"/>
</LinearLayout>

运行效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值