簡體   English   中英

如何檢查RecyclerView適配器中的每個值?

[英]How can I check every value in my RecyclerView adapter?

我有一個自定義的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的itemView的TextView等於“ X”,則顯示AlertDialog。 我想我應該能夠通過每次單擊修改在構造函數中傳遞的String []。

  1. 提取setOnClickListenerViewHolder並將其移動到您的Adapter's onBindViewHolder
  2. 將檢查的位置保持某種形式(例如整數數組)
  3. 當您在其中一個Views上設置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數組會越來越大)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM