你好,我已经创建了一个带有复选框的列表视图...但是我不知道如何获取选中的复选框文本。下面是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>
在listview 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>
这是扩展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;
}
}
这是我的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;
}
}
最后,我将所有国家/地区都保存在values文件夹中的countries.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中的复选框现在我想要的是获得复选框的文本,这些复选框被选中并显示在一个按钮上,单击(测试)我遵循了oreilly的android食谱教程,但我仍然不知道如何设置侦听器
发布于 2013-09-26 20:42:40
在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的getter
ArrayList<String> getSelectedString(){
return selectedStrings;
}
发布于 2013-09-26 20:21:39
也许这会对你有所帮助:
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();
}
}
发布于 2013-09-26 20:19:01
方法可能是将自己的对象传递给您的Arrayadapter:
class ArrayItem{
private String text;
private boolean checked;
... (getter/setter)
}
只需从Arrayadapter取回使用过的Array并读取它。
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的项
希望这能有所帮助。
https://stackoverflow.com/questions/19027843
复制相似问题