Привет, я использую recyclerview с флажком, теперь я пытаюсь проверить все элементы списка, которые пользователь проверяет, я хочу добавить эти элементы в свой массив, прямо сейчас он не работает и добавляет все элементы списка вместо добавления отмеченных. Ниже приведен мой код адаптера. Может ли кто-нибудь помочь мне решить эту проблему?
public static class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {
private LayoutInflater inflater;
public static ArrayList<Model> imageModelArrayList;
private Context ctx;
public CustomAdapter(Context ctx, ArrayList<Model> imageModelArrayList) {
inflater = LayoutInflater.from(ctx);
this.imageModelArrayList = imageModelArrayList;
this.ctx = ctx;
}
@Override
public CustomAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.rv_item, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(final CustomAdapter.MyViewHolder holder, int position) {
holder.checkBox.setText("Checkbox " + position);
holder.checkBox.setChecked(imageModelArrayList.get(position).getSelected());
holder.tvAnimal.setText(imageModelArrayList.get(position).getAnimal());
alertviewlist =new ArrayList<ArrayList<Model>>();
// holder.checkBox.setTag(R.integer.btnplusview, convertView);
holder.checkBox.setTag(position);
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Integer pos = (Integer) holder.checkBox.getTag();
Toast.makeText(ctx, imageModelArrayList.get(pos).getAnimal() + " clicked!", Toast.LENGTH_SHORT).show();
//alertviewlist.addAll(imageModelArrayList);
for (int i = 0; i < imageModelArrayList.size(); i++) {
alertviewlist.add(i, imageModelArrayList);
}
System.out.println(alertviewlist.size());
if (imageModelArrayList.get(pos).getSelected()) {
imageModelArrayList.get(pos).setSelected(false);
} else {
imageModelArrayList.get(pos).setSelected(true);
}
}
});
}
@Override
public int getItemCount() {
return imageModelArrayList.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
protected CheckBox checkBox;
private TextView tvAnimal;
public MyViewHolder(View itemView) {
super(itemView);
checkBox = (CheckBox) itemView.findViewById(R.id.cb);
tvAnimal = (TextView) itemView.findViewById(R.id.animal);
}
}
}
в вашей модели сохраните логическую переменную, чтобы узнать, проверен ли этот элемент или нет, и добавьте ее в свой массив, только если он проверен
@NileshRathod я хочу добавить выбранные имена в свой новый список массивов, пожалуйста, внимательно проверьте вопрос
@VivekMishra смотрите тост, как только пользователь проверит, я получаю имена животных, я хочу добавить проверенные в свой список предупреждений.
@khimjiЯ внимательно проверил вопрос, вам нужно внимательно проверить связанный ответ, используя этот ответ, вы получите подсказку, и, пожалуйста, будьте добры к сообществу, никто здесь не пишет код для вас, мы все здесь друг для друга
Вы на правильном пути, но вам не нужен цикл, чтобы добавить отмеченный элемент в список. Точно так же, как вы показываете свой тост, добавьте этот конкретный элемент в свой отмеченный список.
@NileshRathod, какие бы элементы ни проверял пользователь, я хочу создать еще один список массивов и этот список массивов, который я хочу использовать для другого просмотра повторного использования, это то, что я пытаюсь
@VivekMishra тогда выдает ошибку и заставляет преобразовать мой arraylist в строку
ваше объявление alertViewList неверно. Он должен быть таким же, как ваш imageModelArrayList
Во-первых, вы хотите сделать свой alertViewList списком элементов списка? Это ваш alertviewlist:
alertviewlist = new ArrayList<ArrayList<Model>>();
Основываясь на вашем описании, я думаю, что вы хотите составить список, в котором хранятся модели, верно? Тогда должно быть:
alertviewlist = new ArrayList<Model>();
А для хранения модели не нужно добавлять список imageModelArrayList в alertviewlist. Вам нужно только добавить одну модель из вашего imageModelArrayList с данным pos в ваш alertviewlist. Здесь я меняю код вашего checkBox.setOnClickListener:
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Integer pos = (Integer) holder.checkBox.getTag();
Toast.makeText(ctx, imageModelArrayList.get(pos).getAnimal() + " clicked!", Toast.LENGTH_SHORT).show();
//store your model into alertviewlist
alertviewlist.add(imageModelArrayList.get(pos))
System.out.println(alertviewlist.size());
if (imageModelArrayList.get(pos).getSelected()) {
imageModelArrayList.get(pos).setSelected(false);
} else {
imageModelArrayList.get(pos).setSelected(true);
}
}
});
Возможно ли, я могу создать еще один массив Uri, как это?
Это должно быть хорошо, пока вы удерживаете позицию элемента, который хотите сохранить.
В классе Пользовательский адаптер
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {
private LayoutInflater inflater;
public static ArrayList<Model> imageModelArrayList;
private Context ctx;
public CustomAdapter(Context ctx, ArrayList<Model> imageModelArrayList) {
inflater = LayoutInflater.from(ctx);
this.imageModelArrayList = imageModelArrayList;
this.ctx = ctx;
}
@Override
public CustomAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.rv_item, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(final CustomAdapter.MyViewHolder holder, int position) {
final Model dResult = imageModelArrayList.get(position);
holder.checkBox.setOnCheckedChangeListener(null);
holder.checkBox.setChecked(dResult.getSelected());
holder.checkBox.setTag(dResult);
if (dResult.isSelected()) {
holder.checkBox.setChecked(true);
holder.checkBox.setSelected(true);
} else {
holder.checkBox.setChecked(false);
holder.checkBox.setSelected(false);
}
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b) {
holder.checkBox.setSelected(true);
dResult.setSelected(true);
}else {
holder.checkBox.setSelected(false);
dResult.setSelected(false);
}
}
});
}
@Override
public int getItemCount() {
return imageModelArrayList.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
protected CheckBox checkBox;
private TextView tvAnimal;
public MyViewHolder(View itemView) {
super(itemView);
checkBox = (CheckBox) itemView.findViewById(R.id.cb);
tvAnimal = (TextView) itemView.findViewById(R.id.animal);
}
}}
Затем в вашем классе активности получите выбранный элемент в массиве.
ArrayList<String> SelectedList = new ArrayList<String>();
for (int i=0;i<imageModelArrayList.size;i++){
if (imageModelArrayList.get(i).getSelected()==true){
SelectedList.add(imageModelArrayList.get(i).getAnimal());
}
}
Затем вы можете получить выбранное имя животного в список.
проверьте этот stackoverflow.com/a/54103578/7666442