Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Kotlin中的ListView获取所选项目?_Kotlin_Android Studio 3.0 - Fatal编程技术网

如何从Kotlin中的ListView获取所选项目?

如何从Kotlin中的ListView获取所选项目?,kotlin,android-studio-3.0,Kotlin,Android Studio 3.0,代码示例: package tech.kapoor.listviewdemo import android.content.Context import android.graphics.Color import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.view.View import android.view.ViewGroup import android.widget

代码示例:

package tech.kapoor.listviewdemo

import android.content.Context
import android.graphics.Color
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ListView
import android.widget.TextView
import android.widget.AdapterView


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val listView = findViewById<ListView>(R.id.main_listview)
        var redColor = Color.parseColor("#FF0000")

        listView.setBackgroundColor(redColor)
        listView.adapter = CustomAdapter(this)
    }

    private class CustomAdapter(context: Context): BaseAdapter() {

        private val mContext: Context

        init {
            mContext = context
        }

        override fun getCount(): Int {
            return 80
        }

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

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

        override fun getView(position: Int, view: View?, viewGroup: ViewGroup?): View {
            val textView = TextView(mContext)
            textView.text = "Here comes the !!"
            return textView
        }
    }
}
package tech.kapoor.listviewdemo
导入android.content.Context
导入android.graphics.Color
导入android.support.v7.app.AppActivity
导入android.os.Bundle
导入android.view.view
导入android.view.ViewGroup
导入android.widget.BaseAdapter
导入android.widget.ListView
导入android.widget.TextView
导入android.widget.AdapterView
类MainActivity:AppCompatActivity(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val listView=findviewbyd(R.id.main\u listView)
var redColor=Color.parseColor(#FF0000)
listView.setBackgroundColor(红色)
listView.adapter=CustomAdapter(此)
}
私有类CustomAdapter(上下文:context):BaseAdapter(){
private val mContext:上下文
初始化{
mContext=上下文
}
重写fun getCount():Int{
返回80
}
覆盖getItemId(位置:Int):长{
返回位置。toLong()
}
覆盖趣味getItem(位置:Int):任意{
返回位置
}
覆盖视图(位置:Int,视图:view?,视图组:viewGroup?):视图{
val textView=textView(mContext)
textView.text=“这是一个好消息!!”
返回文本视图
}
}
}
我试图理解列表视图而不是回收器视图,以便首先理解基本知识。
任何人都知道我们如何在选择或onclick时获取所选行id/索引值,以及如何在kotlin中选择特定行时执行某些操作?

您可以在
getView()
方法中使用类似于:

view.setOnClickListener(object : View.OnClickListener {
    override fun onClick(v: View?) {
        //use getItem(position) to get the item
    }
})
或者使用lambda:

view.setOnClickListener({ v -> //use theItem(position) })
只是一个提示:

我试图理解列表视图而不是回收器视图,以便首先理解基本知识


在我看来,在您的项目中,99%的情况下您将使用
RecyclerView

要填充listview,您必须拥有数据集。数据集可以是数据类型(如字符串)的任何列表,也可以使用模型类列表。大概是这样的:

list.onItemClickListener = AdapterView.OnItemClickListener { parent, view, position, id ->
            // This is your listview's selected item
            val item = parent.getItemAtPosition(position) as TopicDTO
        }
这是我将在ListView中使用的数据集的简单列表:

val data = ArrayList<TopicDTO>()
data.add(TopicDTO("1", "Info 1", true))
data.add(TopicDTO("2", "Info 2", false))
data.add(TopicDTO("3", "Info 3", true))
data.add(TopicDTO("4", "Info 4", false))
 list.adapter = ButtonListAdapter(baseContext, data)
下面是一个简单的适配器:

class ButtonListAdapter(//Class for rendering each ListItem

        private val context: Context, private val rowItems: List<TopicDTO>) : BaseAdapter() {

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

    override fun getItem(position: Int): Any {
        return rowItems[position]
    }

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


    private inner class ViewHolder {
        internal var main_text: TextView? = null //Display Name
        internal var subtitle: TextView? = null  //Display Description
        internal var can_view_you_online: Button? = null   //Button to set and display status of CanViewYouOnline flag of the class

    }

    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
        var convertView = convertView
        var holder: ViewHolder? = null


        val mInflater = context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE) as LayoutInflater

        holder = ViewHolder()


        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.main_lp_view_item, null)

            holder.main_text = convertView!!.findViewById(R.id.main_lp_text) as TextView
            holder.subtitle = convertView.findViewById(R.id.main_lp_subtitle) as TextView
            holder.can_view_you_online = convertView.findViewById(R.id.can_view_you_online) as Button

            convertView.tag = holder

        } else {
            holder = convertView.tag as ViewHolder
        }

        val rowItem = rowItems[position]

        val main_text: String
        val subtitle: String


        holder.main_text!!.text = rowItem.info
        holder.subtitle!!.text = rowItem.info

        if (rowItem.canViewYouOnline) {
            holder.can_view_you_online!!.setBackgroundColor(context.resources.getColor(R.color.colorPrimary))
        } else {
            holder.can_view_you_online!!.setBackgroundColor(context.resources.getColor(R.color.colorAccent))
        }


        holder.can_view_you_online!!.setOnClickListener(object : View.OnClickListener {
            internal var buttonClickFlag: Boolean = false


            override fun onClick(v: View) {           //The Onclick function allows one to click the button on the list item and set/reset the canViewYouOnline flag. It is working fine.

            }
        })


        return convertView

    }


}

希望你能理解这一点

在oncreate()中添加OnItemClickListener

在CustomAdapter类中添加项数组

class CustomAdptor(private val context: Activity): BaseAdapter() {
//Array of fruits names
var names = arrayOf("Apple", "Strawberry", "Pomegranates", "Oranges", "Watermelon", "Bananas", "Kiwi", "Tomato", "Grapes")
//Array of fruits desc
var desc = arrayOf("Malus Domestica", "Fragaria Ananassa ", "Punica Granatum", "Citrus Sinensis", "Citrullus Vulgaris", "Musa Acuminata", "Actinidia Deliciosa", "Solanum Lycopersicum", "Vitis vinifera")

//Array of fruits images
var image = intArrayOf(R.drawable.apple, R.drawable.strawberry, R.drawable.pomegranates, R.drawable.oranges, R.drawable.watermelon, R.drawable.banana, R.drawable.kiwi, R.drawable.tomato, R.drawable.grapes)
override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {
    val inflater = context.layoutInflater
    val view1 = inflater.inflate(R.layout.row_data,null)
    val fimage = view1.findViewById(R.id.fimageView)
    var fName = view1.findViewById(R.id.fName)
    var fDesc = view1.findViewById(R.id.fDesc)
    fimage.setImageResource(image[p0])
    fName.setText(names[p0])
    fDesc.setText(desc[p0])
    return view1
}

override fun getItem(p0: Int): Any {
    return image[p0]
}

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

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


您可以在以下网址找到整个教程:

我来自iOS开发平台。希望您不介意我问,如何使它在所附的代码中工作?请先指定您的要求。你基本上想要什么?所选项目的ArrayList或仅单击的项目?如问题中所述,仅单击的项目。让我为您创建一个示例。为此创建了Github存储库。您能否在拉取请求中显示相同的内容?
class CustomAdptor(private val context: Activity): BaseAdapter() {
//Array of fruits names
var names = arrayOf("Apple", "Strawberry", "Pomegranates", "Oranges", "Watermelon", "Bananas", "Kiwi", "Tomato", "Grapes")
//Array of fruits desc
var desc = arrayOf("Malus Domestica", "Fragaria Ananassa ", "Punica Granatum", "Citrus Sinensis", "Citrullus Vulgaris", "Musa Acuminata", "Actinidia Deliciosa", "Solanum Lycopersicum", "Vitis vinifera")

//Array of fruits images
var image = intArrayOf(R.drawable.apple, R.drawable.strawberry, R.drawable.pomegranates, R.drawable.oranges, R.drawable.watermelon, R.drawable.banana, R.drawable.kiwi, R.drawable.tomato, R.drawable.grapes)
override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {
    val inflater = context.layoutInflater
    val view1 = inflater.inflate(R.layout.row_data,null)
    val fimage = view1.findViewById(R.id.fimageView)
    var fName = view1.findViewById(R.id.fName)
    var fDesc = view1.findViewById(R.id.fDesc)
    fimage.setImageResource(image[p0])
    fName.setText(names[p0])
    fDesc.setText(desc[p0])
    return view1
}

override fun getItem(p0: Int): Any {
    return image[p0]
}

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

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