我已经通过在选择时更改项目的背景颜色来实现回收器 View 多个项目选择。当我从模型中删除这些项目时,项目被删除但突出显示不会随着项目的删除而消失,而是应用在剩余的项目上。
我已尝试从模型中移除项目并在每次移除时通知适配器,如下所示
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)
}
即使删除项目后,突出显示的项目仍然随机出现在列表中,如下例
我希望高亮 View 在从模型中移除后消失,如何解决这个问题?
适配器实现代码
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
}
}
}
最佳答案
试试这个:
在您的 POJO 类中获取一个 Boolean
变量
public class POJO {
boolean isSelected;
public boolean isSelected() {
return isSelected;
}
public void setSelected(boolean selected) {
isSelected = selected;
}
}
在您的 onBindViewHolder()
方法中进行以下更改
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if(pojoArrayList.get(position).isSelected()){
// make selection in your item
}else {
//remove selction from you item
}
}
现在在你的 onLongClickListener
中让你的选择为真
示例代码
sampleButton.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
// set the status of selection
pojoArrayList.get(position).setSelected(true);
return true;
}
});
当你想删除选择时使用这个
pojoArrayList.get(position).setSelected(false);
当你想从列表中删除项目时,使用 boolean
变量来删除项目
if(pojoArrayList.get(position).isSelected()){
//remove the item from list
// and notifyDataSetChanged(); after removing the item from list
}
关于android - 如何清除回收站 View 中突出显示的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54103473/