it-swarm.com.de

Android holt alle markierten Kontrollkästchen in listView

hallo, ich habe eine Listenansicht mit Kontrollkästchen erstellt ... , aber ich weiß nicht, wie man den Kontrollkästchen-Text erhält, der ausgewählt ist. Hier ist der Code von 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>

ein weiteres Layout, das in der Listendarstellung main.list_item.xml Kontrollkästchen enthält

<?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>

und dies ist die Klasse, die Arrayadapter erweitert

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

und das ist meine mainActivity-Klasse

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

}

und schließlich habe ich alle Länder in einer Datei countries.xml im Ordner "Werte" gespeichert

<?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>

es zeigt die Kontrollkästchen in der Liste. Jetzt möchte ich den Text der Kontrollkästchen abrufen, die markiert sind und in einem Toast auf einen Button klicken (zum Testen). Ich folgte dem Tutorial im Android-Kochbuch von oreilly, aber ich weiß es nicht Wie wird der Listener eingestellt?

9
Wasif Khalil

Fügen Sie in CheckboxAdapter.Java hinzu

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

Dann in der getView-Methode

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

            }
        });

Schreibe einen Getter, der selectedStrings zurückgibt

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

Vielleicht hat dir das geholfen:

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

Ein Ansatz könnte darin bestehen, ein eigenes Objekt an Ihren Arrayadapter zu übergeben:

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

und holen Sie sich einfach das verwendete Array von Arrayadapter zurück und lesen Sie es.

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


}

Sie können die Liste durchlaufen und nur die Elemente bearbeiten, bei denen das Kontrollkästchen aktiviert ist

Hoffe das hilft.

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