Kotlin中ListView與RecyclerView的應(yīng)用講解
寫下來自己以后看:
先是item的布局文件:
里邊放了一個(gè)圖片和一個(gè)文本框
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/linearLayout"
>
<ImageView
android:id="@+id/imageView"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center_vertical"
/>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
/>
</LinearLayout>
ListView:
布局文件:
<?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=".ListViewActivity">
<ListView
android:id="@+id/listView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
適配器:
class FruitAdapter(private val context: Context, private val list : List<Fruit>) : BaseAdapter() {
override fun getCount(): Int = list.size
override fun getItem(position: Int): Any = list[position]
override fun getItemId(position: Int): Long = position.toLong()
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? {
var convertView = convertView
var holder : ViewHolder? = null
if (convertView == null){
holder = ViewHolder()
convertView = View.inflate(context,R.layout.item_list_view,null)
holder.textView = convertView.findViewById<View>(R.id.textView) as TextView
holder.imageView = convertView.findViewById<View>(R.id.imageView) as ImageView
holder.linearLayout = convertView.findViewById<View>(R.id.linearLayout) as LinearLayout
convertView.tag = holder
}else{
holder = convertView.tag as ViewHolder
}
holder.textView!!.text = list[position].name
holder.imageView!!.setImageResource(list[position].image)
holder.linearLayout!!.setOnClickListener {
Toast.makeText(context,list[position].name,Toast.LENGTH_SHORT).show()
}
return convertView
}
internal class ViewHolder{
var textView : TextView? = null
var imageView : ImageView? = null
var linearLayout : LinearLayout? = null
}
}
剩下的就是邏輯處理:
class ListViewActivity : AppCompatActivity() {
private val bean = ArrayList<Fruit>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_list_view)
for (i in 1..100){
bean.add(Fruit(i.toString(),R.drawable.ic_launcher_foreground))
}
val adapter = FruitAdapter(this,bean)
listView.adapter = adapter
}
}
RecyclerView:
布局文件:
<?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=".RecyclerViewActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
適配器:
class FruitRecyclerViewAdapter(private val context: Context,private val list: List<Fruit>) : RecyclerView.Adapter<FruitRecyclerViewAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view : View = LayoutInflater.from(context).inflate(R.layout.item_list_view,null)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.itemView.textView.text = list[position].name
holder.itemView.imageView.setImageResource(list[position].image)
holder.itemView.linearLayout.setOnClickListener {
Toast.makeText(context,list[position].name,Toast.LENGTH_SHORT).show()
}
}
override fun getItemCount(): Int = list.size
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private val textView : TextView = itemView.findViewById(R.id.textView)
private val imageView : ImageView = itemView.findViewById(R.id.imageView)
private val linearLayout : LinearLayout = itemView.findViewById(R.id.linearLayout)
}
}
邏輯代碼:
class RecyclerViewActivity : AppCompatActivity() {
private val bean = ArrayList<Fruit>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_recycler_view)
repeat(3){
for (i in 1..15){
bean.add(Fruit(i.toString(),R.drawable.ic_launcher_foreground))
}
}
val layoutManger = LinearLayoutManager(this)
//layoutManger.orientation = LinearLayoutManager.HORIZONTAL
recyclerView.layoutManager = layoutManger
val adapter = FruitRecyclerViewAdapter(this,bean)
recyclerView.adapter = adapter
}
}
這里的repeat函數(shù)是重復(fù)三次,意思就是會(huì)有三個(gè)1到15,也就是此recyclerView會(huì)有45個(gè)item.
現(xiàn)在的是縱向滑動(dòng)的,如果要改成橫向的,就把我代碼中的注釋掉的
//layoutManger.orientation = LinearLayoutManager.HORIZONTAL
取消注釋就可以實(shí)現(xiàn)橫向滑動(dòng)了,如果不嫌棄難看,布局文件就不用改。
最后是實(shí)體類:
class Fruit(val name : String,val image : Int) {
}
定義了一個(gè)name用來顯示名字,定義了一個(gè)image,用來顯示圖片。
到此這篇關(guān)于Kotlin中ListView與RecyclerView的應(yīng)用講解的文章就介紹到這了,更多相關(guān)Kotlin中ListView與RecyclerView內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android開發(fā)中關(guān)于組件導(dǎo)出的風(fēng)險(xiǎn)及防范
這篇文章主要介紹了Android開發(fā)中關(guān)于組件導(dǎo)出的風(fēng)險(xiǎn)及防范,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
解決android studio 打包發(fā)現(xiàn)generate signed apk 消失不見問題
這篇文章主要介紹了解決android studio 打包發(fā)現(xiàn)generate signed apk 消失不見問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Android嵌套R(shí)ecyclerView左右滑動(dòng)替代自定義view
這篇文章主要介紹了Android嵌套R(shí)ecyclerView左右滑動(dòng)替代自定義view,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-06-06
Android調(diào)用系統(tǒng)的發(fā)郵件功能的小例子
這篇文章介紹了Android調(diào)用系統(tǒng)的發(fā)郵件功能的小例子,有需要的朋友可以參考一下2013-08-08
Android自定義View實(shí)現(xiàn)等級(jí)滑動(dòng)條的實(shí)例
這篇文章主要介紹了 Android自定義View實(shí)現(xiàn)等級(jí)滑動(dòng)條的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-04-04
Android應(yīng)用中使用XmlSerializer序列化XML數(shù)據(jù)的教程
這篇文章主要介紹了Android應(yīng)用中使用XmlSerializer序列化XML數(shù)據(jù)的教程,XmlSerializer序列化XML同時(shí)也是將數(shù)據(jù)寫為XML格式的基本方法,需要的朋友可以參考下2016-04-04
Android通過原生方式獲取經(jīng)緯度與城市信息的方法
這篇文章主要給大家介紹了關(guān)于Android通過原生方式獲取經(jīng)緯度與城市信息的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Android從Fragment跳轉(zhuǎn)到其他Activity的簡(jiǎn)單實(shí)例
這篇文章主要介紹了Android從Fragment跳轉(zhuǎn)到其他Activity的簡(jiǎn)單實(shí)例,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02

