我有一个自定义的RecyclerView适配器,该适配器从包含9个固定数据点的onCreate方法实例化:
GridRecyclerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
/* Dummy cell data */
String[] data = {"", "", "", "", "", "", "", "", ""};
...
/* Init RecyclerView */
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
int numColumns = 3;
recyclerView.setLayoutManager(new GridLayoutManager(this, numColumns));
adapter = new GridRecyclerAdapter(this, data, numColumns, player1, player2);
adapter.setClickListener(this);
recyclerView.setAdapter(adapter);
}
单击后,ViewHolder中的clickListener会将文本设置为“ X”。
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView cellTextView;
ViewHolder(View itemView) {
super(itemView);
cellTextView = (TextView) itemView.findViewById(R.id.textView);
itemView.setOnClickListener(v -> {
/* Set cell TextView to "X" */
cellTextView.setText("X");
});
}
}
每次单击时,我要检查itemViews的特定组合是否具有特定值。例如,如果位置1、2和3的itemViews的TextView等于“ X”,则显示AlertDialog。我想我应该能够通过每次单击修改在构造函数中传递的String []。
最佳答案
从setOnClickListener
中提取ViewHolder
并将其移至Adapter's
onBindViewHolder
。
将检查的位置保持某种形式(例如整数数组)
当您在其中一个X
上设置Views
时,请查看所检查位置的更改是否对显示您的AlertDialog
有效。
public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ViewHolder> {
List<Integer> xPositions = new ArrayList<>();
// ... all the needed stuff.
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.itemView.setOnClickListener(v -> {
holder.showX();
xPositions.add(holder.getAdapterPosition());
checkIfShouldShowAlert();
});
}
void checkIfShouldShowAlert() {
// do your checks on xPositions and show the AlertDialog if needed
}
public static class ViewHolder extends RecyclerView.ViewHolder {
TextView cellTextView;
ViewHolder(View itemView) {
super(itemView);
cellTextView = (TextView) itemView.findViewById(R.id.textView);
}
void showX(){
cellTextView.setText("X");
}
}
}
请记住要添加一种机制,以防止连续单击相同的视图(否则
xPositions
数组会越来越大)。