[英]Android - How to change the visibility of a widget of and show it in all items in recyclerView?
[英]How to change the visibility of all RecyclerView items when a single item is long clicked in Android?
我要在Android中选择多个RecyclerView
,以便删除所选项目。
复选框最初是不可见的,主要逻辑是当长时间单击单个视图时,所有复选框都是可见的。
我正在执行长按onBindViewHolder
,只有被单击的一个可见。
这是我的适配器:
private Context mContext ;
private ArrayList<Picture> mData ;
private ArrayList<Picture> mDataFiltered;
public CoffretPicturesAdapter(Context mContext, ArrayList<Picture> mData) {
this.mContext = mContext;
this.mData = mData;
this.mDataFiltered = mData;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view ;
LayoutInflater mInflater = LayoutInflater.from(mContext);
view = mInflater.inflate(R.layout.cardview_item_coffret,parent,false);
return new MyViewHolder(view);
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String charString = charSequence.toString();
if (charString.isEmpty()) {
mDataFiltered = mData;
} else {
ArrayList<Picture> filteredList = new ArrayList<>();
for (Picture row : mData) {
// name match condition. this might differ depending on your requirement
// here we are looking for name or phone number match
if (row.getTitle().toLowerCase().contains(charString.toLowerCase())) {
filteredList.add(row);
}
}
mDataFiltered = filteredList;
}
FilterResults filterResults = new FilterResults();
filterResults.values = mDataFiltered;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
mDataFiltered = (ArrayList<Picture>) filterResults.values;
notifyDataSetChanged();
}
};
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
holder.coffret_title.setText(mDataFiltered.get(position).getTitle());
Picasso.with(mContext).load(mDataFiltered.get(position).getUri()).placeholder(R.drawable.placeholder).resize(500,500).centerCrop().into(holder.coffret_thumbnail);
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(mContext, "" + mDataFiltered.get(position).getTitle(), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(mContext, SelectedPicPreviewActivity.class);
intent.putExtra("image_url", mDataFiltered.get(position).getUri().toString());
mContext.startActivity(intent);
}
});
holder.cardView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
holder.checkBox.setVisibility(View.VISIBLE);
return true;
}
});
}
@Override
public int getItemCount() {
return mDataFiltered.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
TextView coffret_title;
ImageView coffret_thumbnail;
LinearLayout cardView ;
CircleCheckBox checkBox;
public MyViewHolder(View itemView) {
super(itemView);
coffret_title = (TextView) itemView.findViewById(R.id.coffret_title_id) ;
coffret_thumbnail = (ImageView) itemView.findViewById(R.id.coffret_img_id);
cardView = (LinearLayout) itemView.findViewById(R.id.cardview_id);
checkBox = (CircleCheckBox) itemView.findViewById(R.id.circle_check_box);
}
}
希望你们能帮助我找到问题,并告诉我适配器方法的工作方式。
我希望您创建一个布尔标志,该标志将指示所有复选框的可见性,并调用notifyDataSetChanged()
来重新绑定项目:
private boolean mAreCheckboxesVisible = false;
// ...
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
// ...
holder.checkBox.setVisibility(mAreCheckboxesVisible ? View.VISIBLE : View.GONE);
holder.cardView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
mAreCheckboxesVisible = true;
notifyDataSetChanged();
return true;
}
});
}
如果要退出选择模式:
mAreCheckboxesVisible = false;
notifyDataSetChanged();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.