2016-07-25 41 views
0

ReyclerView中獲取有關複選框的信息我需要從recyclerView獲取有關項目的信息。我嘗試做這樣的事情,但這並沒有工作,任何想法?我認爲調用CheckBox是無用的,我不需要它。但現在我沒有任何想法如何去做。如何從片段

private void handlerForChannels() { 
    list = ChannelsManager.getInstance().getChannelList(); 
    mAdapter = new SettingsCustomAdapter(context, posit, list); 
    verticalGridView.setAdapter(mAdapter); 
    textView.setText(R.string.title_channels); 
    button.setText(R.string.select_all); 
    final SparseBooleanArray mChecked = new SparseBooleanArray(); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mAdapter.getItemViewType(SETTINGS_CHANNELS); 
      mAdapter.getItemId(getId()); 
      CheckBox cb; 
      int count = list.size(); 
      cb = (CheckBox) view.findViewById(R.id.checkBox_for_recycle); 
      for (int i = 0; i < count; i++) { 
       mChecked.put(i, cb.isChecked()); 
      } 


      mAdapter.notifyDataSetChanged(); 

     } 
    }); 
    button.setNextFocusLeftId(R.id.select_all); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

     } 
    }); 
    button1.setText(R.string.cancel_text); 
    button1.setNextFocusLeftId(R.id.select_all); 
    button1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      ((MainActivity) activity).closeSettingsDrawerFragment(); 
     } 
    }); 
    button2.setText(R.string.ok_text); 
    button2.setNextFocusLeftId(R.id.ok_button); 
    button2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

     } 
    }); 
} 
+0

我認爲需要調用一個適配器並從項目中獲取所有東西,但是如何實現? – Rodriquez

+0

我想使用於選擇/取消選擇所有項目。 我的應用程序如下所示:http://imgur.com/a/HBSin 按鈕+標題是一個片段,對於recyclerview,我使用文本,checbox創建新的佈局。我不知道如何在片段中創建功能來選擇/取消選擇所有記錄 – Rodriquez

+0

你只是想選擇全部或選中哪一個? –

回答

3

添加一個新的陣列到您的適配器與布爾值,設置複選框true或false:

//... 
    public ArrayList<Boolean> checkBoxesState; 
    //... 

    public mAdapter(Context context, ArrayList<String> posit, ArrayList<String> list, ArrayList<Boolean> checkBoxesState /* <- add this one*/) { 
     //... 
     this.checkBoxesState = checkBoxesState; 
    } 

,如果他們接受檢查或不超過您設置的:

@Override 
    public void onBindViewHolder(final NotaViewHolder viewHolder, final int position) { 

     //... 
     viewHolder.checkBox.setChecked(checkBoxesState.get(position)); 
    } 

現在您可能已經知道如何檢查它們了,但對於那些也偶然發現的人來說,這裏是如何操作的:

//create adapter 
    mAdapter = new mAdapter(context, posit, list, checkBoxesStates /* <- fill with false booleans */); 
    recyclerView.setAdapter(mAdapter); 

    //check them all 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      for (int i = 0; i <= mAdapter.getItemCount(); i++) { 
       checkBoxesStates.add(i, true); 
       mAdapter.notifyItemChanged(0); //this updates the adapter 
      } 
     } 
    }); 

編輯:

你必須創建在ViewHolder你的複選框,這樣的事情:

 public class NotaViewHolder extends RecyclerView.ViewHolder { 

     //... 
     CheckBox checkBox; 


     public NotaViewHolder(final View itemView) { 
      super(itemView); 

      //... 

      checkBox = (CheckBox) itemView.findViewById(R.id.rowCheckBox); 

      //... 
     } 
    } 
+0

嘗試在空對象引用上調用虛擬方法'java.lang.Object java.util.ArrayList.get(int)' ON viewHolder.checkBox.setChecked(checkBoxesState.get(position)); 有什麼想法? – Rodriquez

+0

是的,請參閱edit =) –

1

做到這一點的最好辦法: 1.在適配器中添加一些代碼:

private boolean isAllCheckBoxSelected; 

public void setAllCheckBoxesSelected(boolean isSelected){ 
isAllCheckBoxSelected = isSelected; 
notifyDataSetChanged(); 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
... 
holder.mCheckBox.setChecked(isAllCheckBoxSelected); 
... 
} 

在片段通話2.在您需要

mAdapter.setAllCheckBoxesSelected(true or false);