首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android获取listView中所有选中复选框的文本

Android获取listView中所有选中复选框的文本
EN

Stack Overflow用户
提问于 2013-09-26 20:07:58
回答 5查看 43.6K关注 0票数 10

你好,我已经创建了一个带有复选框的列表视图...但是我不知道如何获取选中的复选框文本。下面是activity_main.xml的代码

代码语言:javascript
复制
<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>

在listview main.list_item.xml中显示复选框的另一个布局

代码语言:javascript
复制
<?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>

这是扩展arrayadapter的类

代码语言:javascript
复制
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类

代码语言:javascript
复制
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;
    }

}

最后,我将所有国家/地区都保存在values文件夹中的countries.xml文件中

代码语言:javascript
复制
<?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中的复选框现在我想要的是获得复选框的文本,这些复选框被选中并显示在一个按钮上,单击(测试)我遵循了oreilly的android食谱教程,但我仍然不知道如何设置侦听器

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-09-26 20:42:40

在CheckboxAdapter.java内部添加

代码语言:javascript
复制
ArrayList<String> selectedStrings = new ArrayList<String>();

然后在getView方法内部

代码语言:javascript
复制
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的getter

代码语言:javascript
复制
ArrayList<String> getSelectedString(){
  return selectedStrings;
}
票数 25
EN

Stack Overflow用户

发布于 2013-09-26 20:21:39

也许这会对你有所帮助:

代码语言:javascript
复制
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();
        }
    }
票数 18
EN

Stack Overflow用户

发布于 2013-09-26 20:19:01

方法可能是将自己的对象传递给您的Arrayadapter:

代码语言:javascript
复制
class ArrayItem{
    private String text;
    private boolean checked;
    ... (getter/setter)
}

只需从Arrayadapter取回使用过的Array并读取它。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19027843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档