java - 更改列表视图中所选项目的背景
问题描述
当我尝试更改listview
. 当我选择项目 A 时,它的背景发生了变化。如果我选择项目 B,它也会改变,但项目 A 不会恢复为默认背景。
这个可绘制用于background selected_item.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true"
android:drawable="@color/colorMegna"/>
<item android:drawable="@color/colorWhite"/>
</selector>
这是 XML item_kategori.xml
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lay_nama_kategori"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:orientation="vertical"
android:background="@drawable/selected_item">
<TextView
android:id="@+id/txtView_kategori"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textAllCaps="false"
android:textColor="@color/colorMegna"
android:layout_marginStart="10dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"/>
</LinearLayout>
这是setOnClickListener()
适配器:
inner class CategoryViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){
fun bind(kategori: Category){
itemView.txtView_kategori.text = kategori.category
itemView.setOnClickListener {
if(kategoriList[adapterPosition] == kategori){
itemView.isSelected = true
itemView.txtView_kategori.setTextColor(Color.WHITE)
}
}
}
}
解决方案
您需要跟踪选择了哪个ListItem。在您的 Adapter 类中,创建一个存储当前ListItem的变量,该变量被选中
- 创建你的变量
lastClicked
- 在适配器的构造函数中,将该变量设置为 -1,这样它就不会指向任何东西
- 每当您单击ListItem B 时,将lastClicked ListItem(在本例中为 Item A)背景更改为原始,然后将新的ListItem(项目 B)位置保存到
selectedItem
并更改背景以显示新单击的ListItem
推荐阅读
- php - Ad_group_ad_asset_view 中的 Google 广告 api 字段asset.name 为空,类型为 YOUTUBE_VIDEO
- symfony - 始终在学说 DQL 中获得列
- reactjs - 没有重载与 Vega-react 库匹配此调用
- encoding - 如何为 psexec 执行 UAC?
- python - 引发特定异常python
- python - 信息 - 任务退出并返回代码 Negsignal.SIGSEGV
- python - 带有关联表类对象的 Flask SQLAlchemy 多对多
- java - JAVA Json:属性的getter定义冲突
- perl - Perl - 子程序“Hash::Merge::merge”的深度递归
- mysql - 交叉连接 2 个表,但包含一个空行