我在android应用程序上使用自定义适配器查看列表。我不知道如何设置项目单击的侦听器。我的应用程序使用Kotlin。
这是我的适配器布局。
<?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="match_parent">
<CheckBox
android:id="@+id/cbx"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
<TextView
android:id="@+id/txtNameNote"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_toRightOf="@+id/cbx"
/>
<TextView
android:id="@+id/txtPercent"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="TextView"
android:layout_toRightOf="@+id/cbx"
android:layout_below="@+id/txtNameNote"
/>
</RelativeLayout>
</LinearLayout>
class CustomAdapter(internal var context: Context, resource: Int, internal var listNote: ArrayList<Note>) : ArrayAdapter<Note>(context, resource, listNote) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
var convertView = convertView
// TODO Auto-generated method stub
val inflater = (context as Activity).layoutInflater
convertView = inflater.inflate(R.layout.rowlistitem, parent, false)
val name = convertView!!.findViewById<View>(R.id.txtNameNote) as TextView
val percent = convertView.findViewById<View>(R.id.txtPercent) as TextView
val cb = convertView.findViewById<View>(R.id.cbx) as CheckBox
name.text = listNote[position].name
percent.text = "Percent: " + listNote[position].percent + "%"
if (listNote[position].status == NoteStatus.Active.value)
cb.isChecked = false
else{
name.paintFlags = (name.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG)
cb.isChecked = true
}
}
}
return convertView
}
}
有人可以帮助我吗?
Kotlin中正确的方法是创建回调。然后在适配器中创建一个click监听器,并将结果转发给回调函数。
class CustomAdapter(
internal var context: Context,
resource: Int,
internal var listNote: ArrayList<Note>,
val callback: (Note) -> Unit) : ArrayAdapter<Note>(context, resource, listNote) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
// .. do your bindings whatever
convertView.yourRootLayoutElement.setOnClickListener{
if (callback != null) callback(listNote[position])
}
return convertView
}
}
在您创建适配器的视图中
CustomAdapter(...., { info { "Clicked $it" } })
因为不用ListView,所以没有测试过。我推荐你使用RecyclerView。ListView已被弃用,出于几个原因不推荐使用。在这里看一些原因。
编辑:绝对没有理由使用ListView而不是RecyclerView。即使它有效,您也不应该使用它。了解 RecyclerView,因为 ListView 不应再使用。
我正在尝试为我的列表视图制作一个自定义适配器,但我在同一行上不断得到一个 RessourceNotFoundException。 首先,这是我的适配器类代码: 这是视图的xml,包含listview: 以及带有上述列表视图的项目布局的xml文件: 这是在我的活动中设置适配器的代码(扩展活动) 我遇到的错误是: 12661-12661/com.mobileplatformexam E/Android
问题内容: 嗨,您想创建一个自定义光标适配器,以便显示2行文本的图像。我在理解自定义光标适配器时遇到了一些麻烦,但是我不明白如何添加要从数据库路径填充的imageview。 问题答案: 将, 实际上,我已经实现了与您正在寻找的东西非常相似的东西。这是我的实现。 XML只是万一… 根据特定条件,这将在文本的两行显示最多2幅图像。 希望这可以为您的工作打下基础! 祝好运 :]
我有一个ListView和一个自定义适配器。问题是我看不到listview和数据,只看到一个白色页面。 在片段中我有: 在CustomAdapter中,我有: 我错在哪里? 更新: 谢谢,如果我想在ImageButton上设置onClickListener,我该怎么做?。。我尝试: 但问题是,当我单击例如第一个项目viewHolder时。mNomeView。getText()。toString()
我正在寻找在Android中使用列表适配器和Recyview适配器的区别。关于性能的任何不同,使用它们的利弊。
我正在尝试制作的音乐播放器中使用Volley。 下面是我如何定义音乐播放器中的歌曲。我有一个带有一些属性的“歌曲对象” 我使用albumArtURI用图像填充各种列表和网格视图。 要获取专辑ArtURI,我对其进行查询。如果URI不存在,我必须从Internet上拉取一个图像URL。 所以我设置了截取,从iTunes中提取JSON对象,解析对象,并获取它们的图像URL。 例如,这里是iTunesJ
我使用一个API,它以数组的形式返回数据,比如这个JSON字符串(我们称之为“任务”) 我想将这个响应解析为一个列表。所以我已经用生成的适配器创建了相应的数据类 我的改装服务是这样的 但我想使用容器类型,例如: 作为网络响应结果。这可能不创建自定义adpter或者我将需要创建一个自定义适配器并将其传递给moshi构建器吗?