Android RecyclerView适配器复选框操作
我使用RecyclerView和适配器来显示类对象数组的数据。我有一个主文件夹和两个副文件夹-项目文件夹和标题文件夹。项目持有者有复选框。在RecyclerView中,我对对象的一个参数使用了一个复选框。我怎样才能保存它?剩下的我使用SharedReference,但在这里我不知道如何将它应用到我的活动中 这是我的主支架:Android RecyclerView适配器复选框操作,android,checkbox,android-recyclerview,Android,Checkbox,Android Recyclerview,我使用RecyclerView和适配器来显示类对象数组的数据。我有一个主文件夹和两个副文件夹-项目文件夹和标题文件夹。项目持有者有复选框。在RecyclerView中,我对对象的一个参数使用了一个复选框。我怎样才能保存它?剩下的我使用SharedReference,但在这里我不知道如何将它应用到我的活动中 这是我的主支架: public abstract class MainHolder extends RecyclerView.ViewHolder { abstract void s
public abstract class MainHolder extends RecyclerView.ViewHolder {
abstract void setData(MainItem item);
public MainHolder(@NonNull View itemView) {
super(itemView);
}
}
及项目持有人:
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, parent, 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();
}
公共类MainAdapter扩展了RecyclerView.Adapter{
私人语境;
私有数组列表数据;
SimpleDataFormat SimpleDataFormat=新的SimpleDataFormat(“dd MMMM”,myDateFormatSymbols);
私人监听系统已检查McHeckedListener监视器;
公共接口:MCheckedListener{
void-onItemChecked(int位置,布尔值很重要);
}
public void setOnItemCheckedListener(OnItemCheckedListener侦听器){
mOnItemChecked=监听器;
}
私有静态DateFormatSymbols myDateFormatSymbols=新DateFormatSymbols(){
@凌驾
公共字符串[]getMonths(){
返回新字符串[]{“ааааа”、“фааа”、“ааа”、“аа”,
"июля", "августа", "сентября", "октября", "ноября", "декабря"};
}
};
公共主适配器(上下文、ArrayList数据){
this.context=上下文;
这个数据=数据;
}
@非空
@凌驾
public MainHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图;
开关(视图类型){
案例(常量。项目\标题\文本\视图类型):
view=LayoutFlater.from(上下文)。充气(R.layout.group_布局,父级,false);
返回新的HeaderHolder(视图);
案例(常量。项目\事件\文本\视图类型):
视图=LayoutFlater.from(上下文)。充气(R.layout.list\u item\u cardview,parent,false);
返回新项目持有者(视图);
默认值:抛出新的IllegalArgumentException();
}
}
@凌驾
public void onBindViewHolder(@NonNull final MainHolder,final int position){
holder.setData(data.get(position));
holder.itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
if(holder.getItemViewType()==Constants.ITEM\u HEADER\u TEXT\u VIEWTYPE)
Toast.makeText(上下文,“ажазаазааааааааааа;
其他的
Toast.makeText(上下文,“位置,Toast.LENGTH.SHORT”);
}
});
}
@凌驾
public int getItemViewType(int位置){
返回data.get(position.getViewType();
}
好的,我在ItemHolder中公开了复选框。 在OnBindHolder中,我对复选框进行了一次检查
@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);
}
});
}
}
在片段中,我写入复选框的状态
adapterEvent.setOnItemCheckedListener(new MainAdapter.OnItemCheckedListener() {
@Override
public void onItemChecked(int position, boolean isImportant) {
write(getContext(), events, PROCESSED_EVENTS);
ShowEvents(ShowMode);
}
});