2016-07-25 10 views
0

Ich brauche Informaions über Artikel aus RecyclerView. Ich versuche so etwas zu tun, aber das hat nicht funktioniert, irgendwelche Ideen ?? Ich denke, CheckBox zu benützen ist nutzlos und ich brauche es nicht. aber jetzt habe ich keine Ahnung wie es geht.Wie bekomme ich Informationen über Checkboxen von ReyclerView in Fragment

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

Ich denke, müssen einen Adapter anrufen und bekommen alles von Elementen, aber wie? – Rodriquez

+0

Ich möchte Buton für die Auswahl/Abwahl aller Elemente machen. Meine App sieht wie folgt aus: http://imgur.com/a/HBSin Button + Titel ist ein Fragment, und für recyclerview ich ein neues Layout mit Text erstellen, checbox. Ich weiß nicht, wie man jetzt Funktion in Fragment für die Auswahl/Abwahl aller Datensätze erstellt – Rodriquez

+0

möchten Sie nur alle auswählen, oder prüfen, welche ausgewählt sind? –

Antwort

3

ein neues Array in Ihrem Adapter mit booleans, fügen Sie das Kontrollkästchen wahr oder falsch gesetzt:

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

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

als Sie, wenn sie oder tun erhalten überprüft nicht gesetzt:

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

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

Jetzt wissen Sie wahrscheinlich bereits, wie man sie überprüft, aber für diejenigen, die auch hier stolpern, ist hier:

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

Edit:

Sie haben Ihre Checkbox in dem ViewHolder, um so etwas zu schaffen:

 public class NotaViewHolder extends RecyclerView.ViewHolder { 

     //... 
     CheckBox checkBox; 


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

      //... 

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

      //... 
     } 
    } 
+0

TrueTest setzen, um virtuelle Methode 'java.lang.Object java.util.ArrayList.get (int)' auf eine Null-Objekt-Referenz aufrufen ON viewHolder.checkBox.setChecked (checkBoxesState.get (position)); Irgendeine Idee? – Rodriquez

+0

Ja, siehe Bearbeiten =) –

1

der beste Weg, dies zu tun: 1. in Ihrem Adapter fügen Sie einige Codes:

private boolean isAllCheckBoxSelected; 

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

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

2. in Ihrem Fragment in dem Sie benötigen

mAdapter.setAllCheckBoxesSelected(true or false); 
Verwandte Themen