Отключить кнопки в режиме просмотра ресайклера после нажатия

У меня есть представление переработчика, которое состоит из текста редактирования и кнопок для каждого представления. Я хотел бы иметь функциональность таким образом, чтобы, если я ввожу некоторый текст или прикрепляю изображение для представления, некоторые функции кнопок должны быть отключены в этом представлении, как только я нажимаю кнопку.

С помощью приведенного ниже кода я могу прикреплять изображения, когда функция 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 18.11.2022 09:25

@kelvin Я использую класс модели для получения такой информации, как заголовок, из другого списка, уже сохраненного из моей базы данных.

Minnie 18.11.2022 10:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

КнопкаАдаптер

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.

Другие вопросы по теме