禁用 RecyclerView 按钮
Disable RecyclerView Buttons
RecyclerView layout
@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
,则应禁用其视图中的所有其他按钮。这就是我的方案,任何人都可以建议该怎么做?
提前致谢
在您的适配器中声明一个 public 布尔变量并将其默认值设置为 false;
public boolean clicked = false
里面 onBindViewHolder
检查 if (clicked) myHolder.btn.setEnabled(false); else myHolder.btn.setEnabled(true)
并在您的点击方法中设置 clicked = true
并调用 notifyDataSetChanged()
这将禁用所有按钮,
如果你想禁用所有其他按钮(除了这个按钮)使用一个整数变量 insted 布尔值 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
}
} );
循环遍历 recyclerview 项目并禁用每个按钮但单击的按钮,如下所示:(在我的例子中,recycler 视图是一个 public 静态属性)
//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);
}
RecyclerView layout
@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
,则应禁用其视图中的所有其他按钮。这就是我的方案,任何人都可以建议该怎么做?
提前致谢
在您的适配器中声明一个 public 布尔变量并将其默认值设置为 false;
public boolean clicked = false
里面 onBindViewHolder
检查 if (clicked) myHolder.btn.setEnabled(false); else myHolder.btn.setEnabled(true)
并在您的点击方法中设置 clicked = true
并调用 notifyDataSetChanged()
这将禁用所有按钮,
如果你想禁用所有其他按钮(除了这个按钮)使用一个整数变量 insted 布尔值 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
}
} );
循环遍历 recyclerview 项目并禁用每个按钮但单击的按钮,如下所示:(在我的例子中,recycler 视图是一个 public 静态属性)
//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);
}