Отключить кнопки RecyclerView - PullRequest
0 голосов
/ 27 сентября 2018

RecyclerView layout

enter image description here

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view=inflater.inflate(R.layout.container_fish, viewGroup,false);
    MyHolder holder=new MyHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int i) {

    final MyHolder myHolder= (MyHolder) viewHolder;
    final DataFish current=data.get(i);

    myHolder.textFishName.setText(current.fishName);
    myHolder.textSize.setText("Size: " + current.sizeName);
    myHolder.textType.setText("Category: " + current.catName);
    myHolder.btn.setOnClickListener( new View.OnClickListener() {
        @TargetApi(Build.VERSION_CODES.N)
        @Override
        public void onClick(View v) {

          //code here

        }
    } );

Если щелкнуть Button в представлении, все другие кнопки внутри его представления должны быть отключены.Это то, что мой сценарий может кто-нибудь предложить Как это сделать?Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Циклически перебирайте элементы просмотра и отключайте каждую кнопку, кроме нажатой, как показано ниже: (в моем случае представление переработчика является общедоступным статическим атрибутом)

//exempleActivity.java

public static RecyclerView yourRecyclerView;
...
yourRecyclerView = view.findViewById(R.id.your_recycleriew);

.

//myRecyclerViewAdapter.java

import yourPackage.yourActivity.yourRecyclerView;
for (int j = 0; j < yourRecyclerView.getChildCount(); j++) {
     YourViewHolder holder = (YourViewHolder) yourRecyclerView.findViewHolderForAdapterPosition(j);
     if(i != currentPosition)
          holder.btn.setEnabled(false);
}
0 голосов
/ 27 сентября 2018

Объявите публичную логическую переменную в вашем адаптере и установите для нее значение по умолчанию false;

public boolean clicked = false

внутри onBindViewHolder check if (clicked) myHolder.btn.setEnabled(false); else myHolder.btn.setEnabled(true)

и вваш метод щелчка clicked = true и вызов notifyDataSetChanged()

, это отключит все кнопки,

, если вы хотите отключить все остальные кнопки (кроме этой), используйте целочисленную переменную вместо логического значенияpublic Integer clickedPosition = null

и отметьте if (clickedPosition != null && clickedPosition != getAdapterPosition) myHolder.btn.setEnabled(false); else myHolder.btn.setEnabled(true);

, и в вашем методе щелчка установите clickedPosition = getAdapterPosition и вызовите notifyDataSetChanged()

public  Integer clickedPosition;

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view=inflater.inflate(R.layout.container_fish, viewGroup,false);
    MyHolder holder=new MyHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int i) {

    final MyHolder myHolder= (MyHolder) viewHolder;
    final DataFish current=data.get(i);

    myHolder.textFishName.setText(current.fishName);
    myHolder.textSize.setText("Size: " + current.sizeName);
    myHolder.textType.setText("Category: " + current.catName);
    if(clickedPosition!=null && clickedPosition!=getAdapterPosition()) myHolder.btn.setEnabled(false);
    else myHolder.btn.setEnabled(false);
    myHolder.btn.setOnClickListener( new View.OnClickListener() {
        @TargetApi(Build.VERSION_CODES.N)
        @Override
        public void onClick(View v) {
            clickedPosition = getAdapterPosition();
            notifyDatasetChanged();
          //code here

        }
    } );

 myHolder.btn1.setOnClickListener( new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.N)
            @Override
            public void onClick(View v) {

                //code here

            }
        } );
        myHolder.btn2.setOnClickListener( new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.N)
            @Override
            public void onClick(View v) {
            clickedPosition = null;
            notifyDatasetChanged();
           //code here

            }
        } );
...