软件编程
位置:首页>> 软件编程>> Android编程>> Kotlin中ListView与RecyclerView的应用讲解

Kotlin中ListView与RecyclerView的应用讲解

作者:zhaochengfang  发布时间:2023-01-24 01:26:44 

标签:Kotlin,ListView,RecyclerView

写下来自己以后看:
先是item的布局文件:
里边放了一个图片和一个文本框


<?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函数是重复三次,意思就是会有三个1到15,也就是此recyclerView会有45个item.
现在的是纵向滑动的,如果要改成横向的,就把我代码中的注释掉的
//layoutManger.orientation = LinearLayoutManager.HORIZONTAL
取消注释就可以实现横向滑动了,如果不嫌弃难看,布局文件就不用改。
最后是实体类:


class Fruit(val name : String,val image : Int) {
}

定义了一个name用来显示名字,定义了一个image,用来显示图片。

来源:https://blog.csdn.net/zhaochengfang/article/details/120228055

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com