Android kotlin listview的使用

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

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

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

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

activity_main.xml

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

camera_list_item.xml



    

        

        
    

建立完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):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监听。如果获取到的在线状态为在线,则进入播放页面。

你可能感兴趣的:(Android kotlin listview的使用)