Форум для тех, кто программирует под Android
Anonymous
Когда я добавляю кнопки в RecyclerView и нажимается верхняя кнопка, почему другие кнопки в нижней части представления та
Сообщение
Anonymous » 25 окт 2024, 00:53
Когда я нажимаю кнопки в представлении, при прокрутке автоматически нажимаются другие кнопки внизу представления. Как я могу гарантировать, что нажата только одна кнопка, и сохранить состояние ранее нажатых кнопок?
Адаптер и xml прилагаются`
публичный класс SingleAdapter расширяет RecyclerView.Adapter {
Код: Выделить всё
private Context context;
private ArrayList employees;
// if checkedPosition = -1, there is no default selection
// if checkedPosition = 0, 1st item is selected by default
private int checkedPosition = 0;
public SingleAdapter(Context context, ArrayList employees) {
this.context = context;
this.employees = employees;
}
public void setEmployees(ArrayList employees) {
this.employees = new ArrayList();
this.employees = employees;
notifyDataSetChanged();
}
@NonNull
@Override
public SingleViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(context).inflate(R.layout.item_employee, viewGroup, false);
return new SingleViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull SingleViewHolder singleViewHolder, int position) {
singleViewHolder.bind(employees.get(position));
}
@Override
public int getItemCount() {
return employees.size();
}
class SingleViewHolder extends RecyclerView.ViewHolder {
private TextView textView;
private ImageView imageView;
private Button yesbutton;
private Button nobutton;
SingleViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
imageView = itemView.findViewById(R.id.imageView);
yesbutton = itemView.findViewById(R.id.yesbutton);
nobutton = itemView.findViewById(R.id.nobutton);
}
void bind(final Employee employee) {
if (checkedPosition == -1) {
imageView.setVisibility(View.GONE);
yesbutton.setOnClickListener(null);
nobutton.setOnClickListener(null);
} else {
if (checkedPosition == getAdapterPosition()) {
imageView.setVisibility(View.VISIBLE);
} else {
imageView.setVisibility(View.GONE);
yesbutton.setOnClickListener(null);
nobutton.setOnClickListener(null);
}
}
textView.setText(employee.getName());
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
imageView.setVisibility(View.VISIBLE);
if (checkedPosition != getAdapterPosition()) {
notifyItemChanged(checkedPosition);
checkedPosition = getAdapterPosition();
}
}
});
nobutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
employee.setYesButtonColor(Color.RED);
employee.setNoButtonColor(Color.GREEN);
yesbutton.setBackgroundColor(employee.getYesButtonColor());
nobutton.setBackgroundColor(employee.getNoButtonColor());
}
});
yesbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
employee.setYesButtonColor(Color.GREEN);
employee.setNoButtonColor(Color.RED);
yesbutton.setBackgroundColor(employee.getYesButtonColor());
nobutton.setBackgroundColor(employee.getNoButtonColor());
if (checkedPosition != getAdapterPosition()) {
if(employee.getYesButtonColor() != null) {
yesbutton.setBackgroundColor(employee.getYesButtonColor());
}
if(employee.getNoButtonColor() != null) {
nobutton.setBackgroundColor(employee.getNoButtonColor());
}
}
}
});
}
}
public Employee getSelected() {
if (checkedPosition != -1) {
return employees.get(checkedPosition);
}
return null;
}
< pre class="snippet-code-html lang-html Prettyprint-override">
Подробнее здесь:
https://stackoverflow.com/questions/791 ... sed-why-do
1729806830
Anonymous
Когда я нажимаю кнопки в представлении, при прокрутке автоматически нажимаются другие кнопки внизу представления. Как я могу гарантировать, что нажата только одна кнопка, и сохранить состояние ранее нажатых кнопок? Адаптер и xml прилагаются` публичный класс SingleAdapter расширяет RecyclerView.Adapter { [code]private Context context; private ArrayList employees; // if checkedPosition = -1, there is no default selection // if checkedPosition = 0, 1st item is selected by default private int checkedPosition = 0; public SingleAdapter(Context context, ArrayList employees) { this.context = context; this.employees = employees; } public void setEmployees(ArrayList employees) { this.employees = new ArrayList(); this.employees = employees; notifyDataSetChanged(); } @NonNull @Override public SingleViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { View view = LayoutInflater.from(context).inflate(R.layout.item_employee, viewGroup, false); return new SingleViewHolder(view); } @Override public void onBindViewHolder(@NonNull SingleViewHolder singleViewHolder, int position) { singleViewHolder.bind(employees.get(position)); } @Override public int getItemCount() { return employees.size(); } class SingleViewHolder extends RecyclerView.ViewHolder { private TextView textView; private ImageView imageView; private Button yesbutton; private Button nobutton; SingleViewHolder(@NonNull View itemView) { super(itemView); textView = itemView.findViewById(R.id.textView); imageView = itemView.findViewById(R.id.imageView); yesbutton = itemView.findViewById(R.id.yesbutton); nobutton = itemView.findViewById(R.id.nobutton); } void bind(final Employee employee) { if (checkedPosition == -1) { imageView.setVisibility(View.GONE); yesbutton.setOnClickListener(null); nobutton.setOnClickListener(null); } else { if (checkedPosition == getAdapterPosition()) { imageView.setVisibility(View.VISIBLE); } else { imageView.setVisibility(View.GONE); yesbutton.setOnClickListener(null); nobutton.setOnClickListener(null); } } textView.setText(employee.getName()); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { imageView.setVisibility(View.VISIBLE); if (checkedPosition != getAdapterPosition()) { notifyItemChanged(checkedPosition); checkedPosition = getAdapterPosition(); } } }); nobutton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { employee.setYesButtonColor(Color.RED); employee.setNoButtonColor(Color.GREEN); yesbutton.setBackgroundColor(employee.getYesButtonColor()); nobutton.setBackgroundColor(employee.getNoButtonColor()); } }); yesbutton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { employee.setYesButtonColor(Color.GREEN); employee.setNoButtonColor(Color.RED); yesbutton.setBackgroundColor(employee.getYesButtonColor()); nobutton.setBackgroundColor(employee.getNoButtonColor()); if (checkedPosition != getAdapterPosition()) { if(employee.getYesButtonColor() != null) { yesbutton.setBackgroundColor(employee.getYesButtonColor()); } if(employee.getNoButtonColor() != null) { nobutton.setBackgroundColor(employee.getNoButtonColor()); } } } }); } } public Employee getSelected() { if (checkedPosition != -1) { return employees.get(checkedPosition); } return null; } [/code] < pre class="snippet-code-html lang-html Prettyprint-override">[code] [/code] Подробнее здесь: [url]https://stackoverflow.com/questions/79123713/when-i-add-buttons-in-a-recyclerview-and-the-the-top-button-is-pressed-why-do[/url]