【发布时间】:2019-01-09 04:57:06
【问题描述】:
我已经通过在选择时更改项目的背景颜色来实现回收器视图多项选择。当我从模型中删除这些项目时,项目会被删除,但突出显示不会随着项目的删除而消失,而是应用在剩下的项目上。
我已尝试从模型中删除项目,并在每次删除时通知适配器,如下所示
for (item in selectedItems) {
deleteResidentItem(item.key, sharedPreferences.getString("AuthToken", SHARED_PREFERENCE_DOES_NOT_EXIST))
removeSelectedItemsFromModelById(item.key)
residentRecyclerViewAdapter.notifyItemRemoved(item.value)
residentRecyclerViewAdapter.notifyItemRangeChanged(item.value, mutableResidentList.size)
}
即使删除项目后,突出显示的项目仍会随机出现在列表中,如下例所示
我希望从模型中删除后突出显示的视图消失,如何解决这个问题?
适配器实现代码
class ResidentRecyclerViewAdapter( val residentItems: List<ResidentListModel>):RecyclerView.Adapter<ResidentRecyclerViewAdapter.ResidentViewHolder>() {
lateinit var residentRecyclerViewListenerInterface:ResidentRecyclerViewListenerInterface
fun initResidentRecyclerViewListenerInterface(listener:ResidentRecyclerViewListenerInterface) {
residentRecyclerViewListenerInterface = listener
}
override fun onCreateViewHolder(parent: ViewGroup, p1: Int): ResidentViewHolder {
var layoutInflater = LayoutInflater.from(parent.context)
var inflatedLayout = layoutInflater.inflate(R.layout.single_resident_item, parent, false)
return ResidentViewHolder(inflatedLayout, residentRecyclerViewListenerInterface)
}
override fun getItemCount() = residentItems.size
override fun onBindViewHolder(holder: ResidentViewHolder, posistion:Int) {
//place to bind the values
val ModelName = residentItems.get(posistion).ModelName
val VechicleNo = residentItems.get(posistion).VehicleNo
val SlNo = residentItems.get(posistion).SlNo
holder.vehicle_number.text = VechicleNo
holder.model_name.text = ModelName
holder.sl_no.text = SlNo.toString()
holder.resident_item_wrapper.setOnLongClickListener {
when (holder.is_selected.isChecked) {
// not checked, then check, add to list
false-> {
holder.resident_item_wrapper.setBackgroundColor(Color.parseColor("#1565c0"))
holder.resident_vehicle_number.setTextColor(Color.WHITE)
holder.resident_model_name.setTextColor(Color.WHITE)
holder.is_selected.setBackgroundColor(Color.WHITE)
holder.is_selected.visibility = View.VISIBLE
holder.is_selected.isChecked = true
residentRecyclerViewListenerInterface.onResidentItemLongClickListener(holder.sl_no.text.toString().toInt(), posistion)
}
true -> {
// checked then unselect and remove from list
holder.resident_item_wrapper.setBackgroundColor(Color.WHITE)
holder.resident_vehicle_number.setTextColor(Color.BLACK)
holder.resident_model_name.setTextColor(Color.BLACK)
holder.is_selected.setBackgroundColor(Color.BLACK)
holder.is_selected.visibility = View.GONE
holder.is_selected.isChecked = false
residentRecyclerViewListenerInterface.onResidentItemLongUnselectClickListener(holder.sl_no.text.toString().toInt(),posistion)
}
}
true
}
}
interface ResidentRecyclerViewListenerInterface {
fun onResidentItemLongClickListener(Id:Int, Position:Int)
fun onResidentItemClickListener(Id:Int, Position: Int)
fun onResidentItemLongUnselectClickListener(Id: Int, Position: Int)
}
class ResidentViewHolder(val view: View, residentRecyclerViewListenerInterface:ResidentRecyclerViewListenerInterface):RecyclerView.ViewHolder(view) {
var vehicle_number:TextView
var model_name:TextView
var sl_no:TextView
var resident_item_wrapper:CardView
var is_selected:CheckBox
var resident_vehicle_number:TextView
var resident_model_name:TextView
lateinit var residentRecyclerViewListenerInterface:ResidentRecyclerViewListenerInterface
init {
vehicle_number = view.resident_vehicle_number
model_name = view.resident_model_name
sl_no = view.resident_slno
resident_item_wrapper = view.resident_item_wrapper
is_selected = view.is_selected
resident_vehicle_number = view.resident_vehicle_number
resident_model_name = view.resident_model_name
}
}
}
【问题讨论】:
-
您突出显示是基于 position 。所以在另一个基础上保持你的突出显示,比如它的 id 或 name 或其他东西
-
怎么做?我在 onbindviewholder 内设置了一个 onLongClickListener。
-
从那个监听器我改变了视图背景颜色
-
我假设您的适配器和 recyclerview 没有很好地实现。请分享适配器的实现。您需要 2 种方法来删除项目(
deleteResidentItem和removeSelectedItemsFromModelById)只是一个指标。 -
deleteResidentItem 从服务器中删除该项目,removeSelectedItemsFromModelById 从活动中存在的模型列表中删除
标签: android kotlin android-recyclerview