Ottenere le informazioni sulla casella di controllo da una visione di List
-
29-10-2019 - |
Domanda
Ho un'attività con un frammento di elenco che ha un layout con una casella di controllo per ogni riga. Ho impostato il onclick
Attributo XML per la casella di controllo e eseguire quanto segue per il test
public void onBoxClick(View v){
checkedItems = listview.getCheckedItemPositions();
int checkedItemsCount = checkedItems.size();
}
checkedItemsCount
ritorna 0
, Ho pensato di ottenere quali articoli che vengono controllati usi il listview.getCheckedItemPositions()
Ma non è così come faccio a sapere cosa viene controllato nell'elenco?
Questa è la mia creazione di listfragment
@Override
public void onActivityCreated(Bundle state){
super.onActivityCreated(state);
listview = getListView();
listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listview.setItemsCanFocus(false);
setEmptyText("No Bowlers");
registerForContextMenu(getListView());
populateList();
}
Soluzione 2
Ho aggirato il problema con l'adattatore personalizzato bindView
, Ho creato un ArrayList<Integer>
variabile
ArrayList<Integer> mCheckedItems = new ArrayList<Integer>();
e nel bindView
Ho impostato a checkedchangelistener
Nella casella di controllo per vedere se la casella è stata controllata o meno. Se è stato controllato, ho inserito l'ID dal database che il cursore è entrato nel mCheckedItems Array
adattatore:
public class CheckAdapter extends SimpleCursorAdapter{
Context context;
public CheckAdapter(Context context, int layout, Cursor c,String[] from, int[] to,int flag) {
super(context, layout, c, from, to);
this.context = context;
}
@Override
public void bindView(View view,Context context,Cursor cursor){
final String name = cursor.getString(cursor.getColumnIndex(BowlersDB.NAME));
final int id = cursor.getInt(cursor.getColumnIndex(BowlersDB.ID));
TextView tv = (TextView)view.findViewById(R.id.nameCheckTV);
tv.setText(name);
CheckBox cb = (CheckBox)view.findViewById(R.id.checkBox1);
cb.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if(isChecked){
mCheckedItems.add(id);
}else if(!isChecked){
for(int i=0; i< mCheckedItems.size(); i++){
if(mCheckedItems.get(i) == id){
mCheckedItems.remove(i);
}
}
}
}
});
}
Dopo che l'ID è stato inserito nell'array ho usato l'elenco degli array per usarli come avevo bisogno
Altri suggerimenti
Questo inviare potrebbe aiutare. Fornisce una soluzione usando un'usanza ResourceCursorAdapter
, che fornisce un file CheckBox
e a TextView
per ciascuno ListView
riga.
Per selezionare più elementi in ListView
, verificare questo pagina. Si noti che l'esempio utilizza un file ListActivity
invece di a ListFragment
, ma il tuo codice finirà per essere estremamente simile. Assicurati solo di implementare il Fragment
Metodi del ciclo di vita correttamente (cioè impostare l'adattatore in ListFragment
'S onActivityCreated()
, eccetera.).