Android kotlin listview的使用

之前几次我们弄好了java对接萤石云sdk的项目,并将其转为了kotlin语言格式。

现在我们已实现的功能有:显示指定设备,云台控制。

接下来,我们需要对接sdk的另一个功能,设备列表。让登陆者可以选择播放哪台设备。

首先,我们需要建立一个listview。

activity_main.xml

<ListView
    android:id="@+id/device_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"/>

另外,我们需要定义列表的样式,这里可以简单一点,设置一个名字和在线状态即可。

camera_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:gravity="center">

        <TextView
            android:id="@+id/item_name"
            android:layout_width="250dp"
            android:layout_height="40dp"
            android:textSize="30dp"
            android:text="@string/item_name"
            android:gravity="center_vertical"/>

        <TextView
            android:id="@+id/item_status"
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:textSize="24dp"
            android:text="@string/item_offline"
            android:layout_toRightOf="@+id/item_name"
            android:gravity="center"/>
    </RelativeLayout>

</LinearLayout>

建立完xml样式表,我们先设置一下设备的item属性。作为需要调用的设备,我们需要知道它的名字,Serial,还有在线状态。其他的并非必要,这里就不建立了。

CameraItem

class CameraItem(deviceName: String, deviceSerial: String, status: Int) {
    private var cameraName:String ?= deviceName;
    private var cameraSN:String ?= deviceSerial;
    private var cameraStatus:Int ?= status;


    public  fun getCameraName(): String {
        return cameraName!!
    }
    public  fun getCameraSN():String{
        return cameraSN!!
    }
    public  fun getCameraStatus():Int{
        return cameraStatus!!
    }

    fun setCameraName(cameraName: String){
        this.cameraName = cameraName;
    }

    fun setCameraSN(cameraSN: String){
        this.cameraSN = cameraSN;
    }

    fun setCameraStatus(cameraStatus: Int){
        this.cameraStatus = cameraStatus;
    }

}

注意,kotlin里,我们没有定义构造函数了。也就是在kotlin中,构造函数已经没有重构了,而是分为主构造函数和次级构造函数,具体知识可以通过一篇文章学会Kotlin中的构造函数这篇文章来了解,这里就不阐述了。

设置好camera类之后,我们需要设置Adapter

CameraAdapter

class CameraAdapter(var context: Context,var list:ArrayList<CameraItem>):BaseAdapter(){
    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
        var vH:ViewHolder ?= null
        var view:View?=null
        if (convertView == null){
            vH = ViewHolder()
            view = View.inflate(context,R.layout.camera_list_item,null);
            vH.item_name = view.findViewById(R.id.item_name);
            vH.item_status = view.findViewById(R.id.item_status)
            view.tag = vH
        }else{
            view = convertView
            vH = view.tag as ViewHolder
        }
        Log.d("dwgewrgheh",list.size.toString()+"aa")
        vH?.item_name!!.setText(list.get(position).getCameraName())
        if (list.get(position).getCameraStatus() == 1)
            vH?.item_status!!.setText("在线")
        else
            vH?.item_status!!.setText("离线")

        return view!!
    }
    inner class ViewHolder{
        var item_name: TextView?=null
        var item_status:TextView?=null
    }


    override fun getItem(position: Int): Any {
        return list.get(position)
    }

    override fun getItemId(position: Int): Long {
        return position.toLong()
    }

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

}

其中,ViewHolder类用于存储控件类型。以该例子来说,ViewHolder内包含了两个可空的TextView。

至此,Adapter已经设置好了。

然后在MainActivity内。

listView.adapter = CameraAdapter(this@MainActivity,cameraList)
        listView.setOnItemClickListener(object : AdapterView.OnItemClickListener{
            override fun onItemClick(
                parent: AdapterView<*>?,
                view: View?,
                position: Int,
                id: Long
            ) {
                if (cameraList.get(position).getCameraStatus() == 1){
                    var intent = Intent(this@MainActivity,RealPlayActivity::class.java)
                    var bundle = Bundle()
                    bundle.putString("serialNo",cameraList.get(position).getCameraSN())
                    intent.putExtras(bundle)
                    startActivity(intent)

                }
            }

        })

设置好listview 的 item监听。如果获取到的在线状态为在线,则进入播放页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RecyclerView is a UI component that is used to display large sets of data in an efficient and scrollable manner. The RecyclerView widget is a more advanced and flexible version of ListView. To use RecyclerView, you need to create an adapter that will hold the data and create the views to be displayed. Here is an example of a RecyclerView adapter in Kotlin: ``` class MyAdapter(private val dataList: List<MyData>) : RecyclerView.Adapter<MyAdapter.ViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false) return ViewHolder(view) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { val data = dataList[position] holder.bind(data) } override fun getItemCount() = dataList.size inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun bind(data: MyData) { // bind data to views itemView.textViewTitle.text = data.title itemView.textViewDescription.text = data.description } } } ``` In this example, `MyData` is a data class that holds the data to be displayed in the RecyclerView. The `MyAdapter` class takes a list of `MyData` objects as a parameter in the constructor. The `onCreateViewHolder` method inflates a layout file (`item_layout.xml` in this case) and returns a `ViewHolder` object. The `onBindViewHolder` method binds the data to the views in the `ViewHolder`. Finally, the `getItemCount` method returns the number of items in the list, which is the size of the `dataList`. The `ViewHolder` class holds the views that will be displayed in the RecyclerView and the `bind` method binds the data to the views.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值