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();
    }
È stato utile?

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.).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top