如何解决RecyclerView适配器CheckBox操作
我正在使用RecyclerView和适配器来显示Classes对象数组的数据。我有一个MainHolder和两个subHolder-ItemHolder和HeaderHolder。 ItemHolder具有复选框。在RecyclerView中,我将CheckBox用于对象的参数之一。我该如何保存?其余的我将使用SharedPreferences,但是在这里我不知道如何在我的Activity中应用它。
这是我的MainHolder:
public abstract class MainHolder extends RecyclerView.ViewHolder {
abstract void setData(MainItem item);
public MainHolder(@NonNull View itemView) {
super(itemView);
}
}
和ItemHolder:
public class ItemHolder extends MainHolder{
private TextView tvTitle,tvComment,tvDate;
private CheckBox cbImportance;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMMM",myDateFormatSymbols);
private static DateFormatSymbols myDateFormatSymbols = new DateFormatSymbols(){
@Override
public String[] getMonths() {
return new String[]{"января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"};
}
};
@Override
void setData(MainItem item) {
final Event event = item.getEventItem();
tvTitle.setText(event.getName());
tvComment.setText(event.getComment());
tvDate.setText(simpleDateFormat.format(event.getDate()));
cbImportance.setOnCheckedChangeListener(null);
cbImportance.setChecked(event.getImportant());
cbImportance.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton,boolean b) {
event.IsImportant = b;
}
});
}
public ItemHolder(@NonNull View itemView) {
super(itemView);
tvTitle = itemView.findViewById(R.id.tvTitle);
tvComment = itemView.findViewById(R.id.tvComment);
tvDate = itemView.findViewById(R.id.tvDate);
cbImportance = itemView.findViewById(R.id.cbIconImportant);
}
}
这是我的适配器
public class MainAdapter extends RecyclerView.Adapter<MainHolder> {
private Context context;
private ArrayList<MainItem> data;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMMM",myDateFormatSymbols);
private OnItemCheckedListener mOnItemChecked;
public interface OnItemCheckedListener{
void onItemChecked(int position,boolean isImportant);
}
public void setOnItemCheckedListener(OnItemCheckedListener listener){
mOnItemChecked = listener;
}
private static DateFormatSymbols myDateFormatSymbols = new DateFormatSymbols(){
@Override
public String[] getMonths() {
return new String[]{"января","декабря"};
}
};
public MainAdapter(Context context,ArrayList<MainItem> data) {
this.context = context;
this.data = data;
}
@NonNull
@Override
public MainHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
View view;
switch (viewType){
case (Constants.ITEM_HEADER_TEXT_VIEWTYPE):
view = LayoutInflater.from(context).inflate(R.layout.group_layout,parent,false);
return new HeaderHolder(view);
case (Constants.ITEM_EVENT_TEXT_VIEWTYPE):
view = LayoutInflater.from(context).inflate(R.layout.list_item_cardview,false);
return new ItemHolder(view);
default: throw new IllegalArgumentException();
}
}
@Override
public void onBindViewHolder(@NonNull final MainHolder holder,final int position) {
holder.setData(data.get(position));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (holder.getItemViewType() == Constants.ITEM_HEADER_TEXT_VIEWTYPE)
Toast.makeText(context,"Нажал на заголовок" + position,Toast.LENGTH_SHORT).show();
else
Toast.makeText(context,"Нажал на айтем" + position,Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemViewType(int position) {
return data.get(position).getViewType();
}
解决方法
好吧,我在ItemHolder中公开了此复选框。 在OnBindHolder中,我为复选框设置了OnCheckedChanged
showLoadingDialog
在片段中,我写了复选框的状态。
@Override
public void onBindViewHolder(@NonNull final MainHolder holder,final int position) {
holder.setData(data.get(position));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (holder.getItemViewType() == Constants.ITEM_HEADER_TEXT_VIEWTYPE)
Toast.makeText(context,"Нажал на заголовок" + position,Toast.LENGTH_SHORT).show();
else
Toast.makeText(context,"Нажал на айтем" + position,Toast.LENGTH_SHORT).show();
}
});
if (holder.getItemViewType() == Constants.ITEM_EVENT_TEXT_VIEWTYPE){
((ItemHolder) holder).cbImportance.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton,boolean b) {
data.get(position).getEventItem().IsImportant = b;
if (b){
Toast.makeText(context,"IMPORTANT",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(context,"NON IMPORTANT",Toast.LENGTH_SHORT).show();
}
notifyDataSetChanged();
mOnItemChecked.onItemChecked(position,b);
}
});
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。