У меня есть представление переработчика, которое состоит из текста редактирования и кнопок для каждого представления. Я хотел бы иметь функциональность таким образом, чтобы, если я ввожу некоторый текст или прикрепляю изображение для представления, некоторые функции кнопок должны быть отключены в этом представлении, как только я нажимаю кнопку.
С помощью приведенного ниже кода я могу прикреплять изображения, когда функция ProofClick вызывается через интерфейс, а затем я устанавливаю кнопку как отключенную для одной и той же позиции, но кнопка не отключена, и я могу дважды прикреплять изображения к одному и тому же представлению, что Я не хочу.
Класс адаптера:
// Check if the button is clicked and disable
private boolean clicked = false;
public InsStepsContentAdapter(List<InspectonScroll> scrollList,
ClickOnRecycle clickOnRecycle, String[] options) {
this.scrollList = scrollList;
this.clickOnRecycle = clickOnRecycle;
this.options = options;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_recycler_steps, parent, false));
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.setIsRecyclable(false);
holder.progressbar.setMax(scrollList.size());
holder.title.setText(scrollList.get(position).getSteps().get(position).getTitle());
holder.btnAttach.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clicked){
clicked = true;
clickOnRecycle.ProofClick(holder.getAdapterPosition());
holder.btnAttach.setEnabled(true);
} else{
holder.btnAttach.setEnabled(false);
}
}
});
}
public int getItemCount() {
return scrollList.size();
}
@Override
public int getItemViewType(int position) {
return position;
}
public void updateList(List<ScrollList> scrollList){
this.scrollList = scrollList;
notifyDataSetChanged();
}
Класс модели:
public class InspectonScroll {
private List<Steps> Steps = new ArrayList<>();
public List<Steps> getSteps() {
return steps;
}
public void setSteps(List<Steps> steps) {
this.steps = steps;
}
}
@kelvin Я использую класс модели для получения такой информации, как заголовок, из другого списка, уже сохраненного из моей базы данных.
КнопкаАдаптер
public class ButtonAdapter extends RecyclerView.Adapter<ButtonAdapter.ViewHolder> {
Activity activity;
ArrayList<ButtonModel> arrayList;
public ButtonAdapter(Activity activity, ArrayList<ButtonModel> arrayList) {
this.activity = activity;
this.arrayList = arrayList;
}
@NonNull
@Override
public ButtonAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ViewHolder(activity.getLayoutInflater().inflate(R.layout.row_item,parent,false));
}
@Override
public void onBindViewHolder(@NonNull ButtonAdapter.ViewHolder holder, int position) {
holder.button.setText("item"+position);
ButtonModel item = arrayList.get(position);
holder.button.setEnabled(item.isEnabled);
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (item.isEnabled){
item.isEnabled = false;
notifyDataSetChanged();
}
Toast.makeText(activity, "Clicked", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return arrayList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
Button button;
public ViewHolder(@NonNull View itemView) {
super(itemView);
button = itemView.findViewById(R.id.button);
}
}
}
КнопкаМодель
public class ButtonModel {
boolean isEnabled = true;
}
Здесь можно сделать одну вещь — сохранить состояние кнопки в модели, как показано в примере, и, используя это состояние, мы можем включить или отключить кнопку в методе onBindViewHolder.
Вы используете какую-либо модель для установки данных в представлении ресайклера? если да, отправьте код этого класса модели