web-dev-qa-db-fra.com

Android récupère le texte de tous les cas à cocher dans listView

bonjour j'ai créé une liste avec des cases à cocher dedans ... mais je ne sais pas comment obtenir le texte de case à cocher qui sont sélectionnés .. voici le code de activity_main.xml

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/LinearLayout1"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:gravity="top"
    Android:orientation="vertical"
    tools:context=".MygamesActivity" >

    <ListView
        Android:id="@Android:id/list"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:layout_marginTop="20dp" />

</LinearLayout>

une autre mise en page avec des cases à cocher à afficher dans la liste list. main_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <CheckBox
        Android:id="@+id/checkBox1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="CheckBox"
         />
</LinearLayout>

et c'est la classe qui étend arrayadapter

package com.wasiff.listview;

import Android.content.Context;
import Android.content.res.TypedArray;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.ArrayAdapter;
import Android.widget.CheckBox;
import Android.widget.ImageView;
import Android.widget.TextView;


public class CheckboxAdapter extends ArrayAdapter<String> {
    private LayoutInflater mInflater;

    private String[] mStrings;
    private TypedArray mIcons;
    private int mViewResourceId;

    public CheckboxAdapter(Context ctx,int viewResourceId,String[] strings){
        super(ctx,viewResourceId,strings);

        mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        mStrings = strings;

        mViewResourceId = viewResourceId;
    }

    public int getCount(){
        return mStrings.length;
    }

    public String getItem(int position){
        return mStrings[position];
    }

    public long getItemId(int position){
        return 0;
    }

    public View getView(int position,View convertView,ViewGroup parent){
        convertView = mInflater.inflate(mViewResourceId, null);

        CheckBox tv = (CheckBox)convertView.findViewById(R.id.checkBox1);
        tv.setText(mStrings[position]);

        return convertView;
    }
}

et ceci est ma classe principale d'activité

package com.wasiff.listview;

import Android.app.ListActivity;
import Android.content.Context;
import Android.content.res.Resources;
import Android.content.res.TypedArray;
import Android.os.Bundle;
import Android.view.Menu;
import Android.view.View;
import Android.widget.AdapterView.OnItemClickListener;
import Android.widget.Button;
import Android.widget.ListAdapter;
import Android.widget.ListView;

public class MainActivity extends ListActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Context ctx = getApplicationContext();
        Resources res = ctx.getResources();

        String[] options = res.getStringArray(R.array.countrynames);

        setListAdapter((ListAdapter) new CheckboxAdapter(ctx,R.layout.main_list_item,options));

    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

et enfin j'ai tous les pays sauvegardés dans un fichier countries.xml sur le dossier de valeurs

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="countrynames" translatable="false">
        <item>Bhutan</item>
        <item>Colombia</item>
        <item>India</item>
        <item>Pakistan</item>
        <item>Australia</item>
        <item>Srilanka</item>
        <item>England</item>
    </string-array>
</resources>

il affiche les cases à cocher dans la liste. Ce que je veux maintenant, c’est d’obtenir le texte des cases à cocher cochées et affichées sous forme de pain grillé lors d’un clic sur un bouton (pour tester) j’ai suivi le tutoriel sur le livre de recettes Android de oreilly mais je ne sais pas encore. comment définir l'auditeur

9
Wasif Khalil

Ajouter dans CheckboxAdapter.Java

ArrayList<String> selectedStrings = new ArrayList<String>();

Puis à l'intérieur de la méthode getView

tv.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    selectedStrings.add(tv.getText().toString());
                }else{
                    selectedStrings.remove(tv.getText().toString());
                }

            }
        });

Ecrivez un getter qui retournera selectedStrings

ArrayList<String> getSelectedString(){
  return selectedStrings;
}
20
Swetank

Peut-être que cela vous a aidé:

CheckBox cb;
    ListView mainListView = getListView();
    for (int x = 0; x<mainListView.getChildCount();x++){
        cb = (CheckBox)mainListView.getChildAt(x).findViewById(R.id.myCheckBox);
        if(cb.isChecked()){
            doSomething();
        }
    }
15
Saif Hamed

Une approche possible pourrait consister à transmettre un propre objet à votre Arrayadapter:

class ArrayItem{
    private String text;
    private boolean checked;
    ... (getter/setter)
}

et récupérez simplement le tableau utilisé à partir de tableau et lisez-le.

Arrayadaper...{

    public ArrayList<ArrayItem> getList(){ 
        return this.arrayList;
    }

    public View getView(int position,View convertView,ViewGroup parent){
        ArrayItem item = this.arrayList.get(position)
        convertView = mInflater.inflate(mViewResourceId, null);

        CheckBox tv = (CheckBox)convertView.findViewById(R.id.checkBox1);
        tv.setCheckChangeListener... //item.setChecked(true:false)
        tv.setText(mStrings[position]);

        return convertView;
    }
}


}

Vous pouvez parcourir la liste et manipuler les éléments cochés == true

J'espère que cela t'aides.

1
A.S.
SparseBooleanArray checked = listView1.getCheckedItemPositions();
                ArrayList<String> selectedItems = new ArrayList<String>();

                for (int i = 0; i < len; i++) {
                    if (checked.get(i))
                        selectedItems.add((String) adapter.getItem(i));
                }
                String[] outputStrArr = new String[selectedItems.size()];

                for (int i = 0; i < selectedItems.size(); i++) {
                    outputStrArr[i] = selectedItems.get(i);
                }
1
Pranav Moyal
ListView listView = findViewById(R.id.listView);

listView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);

arrayAdapter = new ArrayAdapter(this,Android.R.layout.simple_list_item_checked,userlist);
listView.setAdapter(arrayAdapter);

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        CheckedTextView checkedTextView= (CheckedTextView)view;
        if(checkedTextView.isChecked()){
            Log.i("info","CHECKED");
        }
        else{
            Log.i("info","UNCHECKED");
        }
    }
});
0
Ashish Goyal