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
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;
}
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();
}
}
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.
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);
}
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");
}
}
});