2017-05-15 25 views
1

我有一個自定義RecyclerView適配器,我從一個包含9個固定的數據點onCreate方法實例:如何檢查我的RecyclerView適配器中的每個值?

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); 
    } 

的clickListener我ViewHolder設置爲「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 []。

+0

您可以使用您按下的位置保留一個單獨的數組。所以,當你說cellTextView.setText(「X」),你也更新你的陣列在那個位置。 – bogdanN

回答

2
  1. 提取的setOnClickListenerViewHolder並將其移動到您Adapter'sonBindViewHolder
  2. 保持檢查位置以某種形式(例如整數數組)
  3. 當你對一個集XViews看看是否在檢查位置的變化爲展示你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陣列會不斷地成長)連續點擊的機制。

相關問題