it-swarm.com.ru

Android получает текст всех отмеченных флажков в listView

привет, я создал список с флажками в нем ... но я не знаю, как получить текст флажка, которые выбраны .. вот код деятельности_основной.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>

другой макет, который имеет флажки для отображения в виде списка 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>

и это класс, который расширяет массив адаптера

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

и это мой класс mainActivity

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

}

и, наконец, у меня есть все страны, сохраненные в файле country.xml в папке значений

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

теперь он показывает флажки в listView, и мне нужно получить текст флажков, которые отмечены и показаны в тосте по нажатию кнопки (для проверки). Я следовал руководству по кулинарной книге Android от oreilly, но все же я не знаю как настроить слушателя

9
Wasif Khalil

Добавить внутрь CheckboxAdapter.Java

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

Тогда внутри метода 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());
                }

            }
        });

Напишите геттер, который будет возвращать selectedStrings

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

Может быть, это поможет вам:

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

На подходе может быть передать собственный объект в ваш Arrayadapter:

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

и просто возьмите использованный массив из Arrayadapter и прочитайте его.

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


}

Вы можете пройтись по списку и просто манипулировать пунктами, где отмечено == true

Надеюсь это поможет.

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