Android中如何获得listview中checkbox的状态?

hanhannina 2010-01-20 11:11:20
如题,就是listview中每一行都有一个checkbox,我想当点击一个按钮时,
把所有checkbox被选中的行的相应数据从数据库中删除,
可是不知道如何能获得checkbox的状态。
谢谢!!
...全文
15896 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq568257773 2012-09-26
  • 打赏
  • 举报
回复
学习一下
xiedaibin 2012-08-14
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 的回复:]

checkbox=(CheckBox) mListView01.getChildAt(i).findViewById(R.id.checkbox);
if(endCheckbox.isChecked())
{
...
......
}

遍历一下显示的listview, 就可以读出listview中所有checkbox的状态。
[/Quote]
呵呵 getChildAt(i)找这个方法好久了.谢谢 o2co21985
hcsbest 2011-07-28
  • 打赏
  • 举报
回复
好东西 找了好久了 终于找到了 谢过了
metalzhang 2011-06-21
  • 打赏
  • 举报
回复
回头再看看
zizhu_1988 2011-06-11
  • 打赏
  • 举报
回复
谁有具体的代码啊
zl552518 2011-06-02
  • 打赏
  • 举报
回复
凑凑热闹,同求可用demo
slaymet 2011-01-11
  • 打赏
  • 举报
回复
跪求一个可用的demo
slaymet 2011-01-11
  • 打赏
  • 举报
回复
7楼的代码不好用

String data = cbs.get(i).getText().toString();

拿不到这个值
n141617 2010-07-30
  • 打赏
  • 举报
回复
其实listview里就有一个显示模式自带有有checkbox,你用那个就挺好的,也可以主进行判断
「已注销」 2010-06-15
  • 打赏
  • 举报
回复
checkbox=(CheckBox) mListView01.getChildAt(i).findViewById(R.id.checkbox);
if(endCheckbox.isChecked())
{
...
......
}

遍历一下显示的listview, 就可以读出listview中所有checkbox的状态。
玄飞 2010-05-04
  • 打赏
  • 举报
回复
引用 26 楼 cancel_li 的回复:
哈哈,不用重写getView()也能实现多选.
在onItemClick()函数内执行CheckBox的动作即可.
不过自己要做个数组保存每行的选中状态,方便批量操作.


请问能具体点吗?有代码可以发一下吗?谢谢了
hanyun867886743 2010-05-04
  • 打赏
  • 举报
回复
public class ClearListActivity extends Activity {
private ImageButton rebibt,delibt,refibt;
private ListView lv;
private static DBHelper helper;
private SQLiteDatabase db;

ArrayList<CheckBox> cbs = new ArrayList<CheckBox>();
ArrayList<TextView> textview = new ArrayList<TextView>();

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.clear);
helper = new DBHelper(this);

rebibt = (ImageButton) findViewById(R.id.clear_reb_ImageButton01);
delibt = (ImageButton) findViewById(R.id.clear_del_ImageButton02);
refibt = (ImageButton) findViewById(R.id.clear_ref_ImageButton03);
lv = (ListView) findViewById(R.id.clear_ListView01);

rebibt.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
Intent intent = new Intent(ClearListActivity.this,
WebListActivity.class);
startActivity(intent);
}
});

delibt.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

//helper.delete();
for(int i=0;i<cbs.size();i++){
if(cbs.get(i).isChecked())
{
String data = cbs.get(i).getText().toString();
//String data = textview.get(i).getText().toString();
db.delete("urltable", data, null);
}
}
}
});

refibt.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
query();
}
});
}

//查询函数
private void query() {

/*ArrayList<String> al = new ArrayList<String>();
al = helper.query();*/

ListAdapter la = new ListAdapter(ClearListActivity.this,R.layout.listview1,helper.query());
lv.setAdapter(la);
}

public class ListAdapter extends ArrayAdapter{

int resource;
Context ct;

public ListAdapter(Context context, int _resource,
List textViewResourceId) {
super(context, _resource, textViewResourceId);
this.resource = _resource;
this.ct = context;
}

@Override
public View getView(int position, View convertView, ViewGroup parent){
LinearLayout layout;
if(convertView == null){
layout = new LinearLayout(ct);
String inflater = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater li =
(LayoutInflater) getContext().getSystemService(inflater);
li.inflate(resource, layout, true);
}else{
layout = (LinearLayout) convertView;
}
CheckBox cb = (CheckBox)layout.findViewById(R.id.lv_CheckBox01);
//TextView tv = (TextView) layout.findViewById(R.id.lv_TextView01);
cbs.add(cb);
//textview.add(tv);
return layout;
}
}
}
好痛苦啊!我的列表内容始终显示不了,现在连删除也删不了了
cancel_li 2010-04-28
  • 打赏
  • 举报
回复
哈哈,不用重写getView()也能实现多选.
在onItemClick()函数内执行CheckBox的动作即可.
不过自己要做个数组保存每行的选中状态,方便批量操作.
cancel_li 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 hanhannina 的回复:]
CheckListView的资源在:http://download.csdn.net/source/2239460
[/Quote]

楼主你这个好象不好用吗?不显示列表内容啊.有没有示例代码一起发出来啊.
玄飞 2010-04-23
  • 打赏
  • 举报
回复
delibt.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

for(int i=0;i<cbs.size();i++){
if(cbs.get(i).isChecked())
{
String data = cbs.get(i).getText().toString();
db.delete("urltable", data, null);
}
}
}
});

refibt.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
query();
}
});
}

//查询函数
private void query() {

ArrayList<String> al = new ArrayList<String>();
Cursor c = db.query("urltable", null, null, null, null, null, null);

if (c.moveToFirst()) {
for (int i = 0; i < c.getCount(); i++) {
c.moveToPosition(i);
String url = c.getString(0);
al.add(url);
}
}

/*ArrayAdapter<String> adapter = new ArrayAdapter<String>(
ClearActivity.this, android.R.layout.simple_list_item_1, al);
lv.setAdapter(adapter);*/

ListAdapter la = new ListAdapter(ClearActivity.this,R.layout.listview,al);
lv.setAdapter(la);

}



public class ListAdapter extends ArrayAdapter{

int resource;
Context ct;

public ListAdapter(Context context, int _resource,
List textViewResourceId) {
super(context, _resource, textViewResourceId);
this.resource = _resource;
this.ct = context;
}

@Override
public View getView(int position, View convertView, ViewGroup parent){
LinearLayout layout;
if(convertView == null){
layout = new LinearLayout(ct);
String inflater = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater li =
(LayoutInflater) getContext().getSystemService(inflater);
li.inflate(resource, layout, true);
}else{
layout = (LinearLayout) convertView;
}
CheckBox cb = (CheckBox)layout.findViewById(R.id.CheckBox01);
TextView tv = (TextView) layout.findViewById(R.id.TextView01);
cbs.add(cb);
textview.add(tv);
return layout;
}
}

我的为什么只显示checkbox而不显示textview呢 还有选任一项都把全部内容删了
hanhannina 2010-04-15
  • 打赏
  • 举报
回复
CheckListView的资源在:http://download.csdn.net/source/2239460
hanhannina 2010-04-14
  • 打赏
  • 举报
回复
android在刷新界面时会产生对界面元素的复用,至于怎样复用,可以在newView()和getView()函数中进行打印,来跟踪系统的调用流程来帮助自己理解。
对于listview中应用checkbox的情况,我这有一个CheckListView类,通过这个类就可以很容易的达到删除listviewitem的效果。有兴趣的,可以去我的资源里找一下,资源名叫“CheckListView”
mmcarter 2010-04-11
  • 打赏
  • 举报
回复
private OnClickListener buttonListener = new OnClickListener(){
public void onClick(View v) {
//对cbs操作,数据库操作
for(int i=0;i<cbs.size();i++){
String data = cbs.get(i).getText().toString();
//数据库再对这个data操作,删掉你想要的数据
}
}


这部分的代码,要做到删除自己选中的那些CheckBox行,是否还需要作一个判断呢,如:

private OnClickListener buttonListener = new OnClickListener(){
public void onClick(View v) {
//对cbs操作,数据库操作
Log.v("size",Integer.toString(cbs.size()));
for(int i=0;i<cbs.size();i++){
if(cbs.get(i).isChecked)
{
String data = cbs.get(i).getText().toString();
//数据库再对这个data操作,删掉你想要的数据

}
}
}


为什么size大小不等于总的行数呢?
急。。。望指教
cxmsee 2010-03-06
  • 打赏
  • 举报
回复
我的list item也包哈一个CheckBox, 在CheckBox的OnChange事件中怎么获取list item的索引值呢?
hanhannina 2010-02-19
  • 打赏
  • 举报
回复
谢谢AspireHouse一直以来对我的帮助!
加载更多回复(18)

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧