如题,就是listview中每一行都有一个checkbox,我想当点击一个按钮时,
把所有checkbox被选中的行的相应数据从数据库中删除,
可是不知道如何能获得checkbox的状态。
谢谢!!
把所有checkbox被选中的行的相应数据从数据库中删除,
可是不知道如何能获得checkbox的状态。
谢谢!!
解决方案 »
- 经典代码合集+ANGLE游戏引擎源码和例子(需要学习的留邮箱)
- Launcher中的主菜单改成左右分页滑动时addView出错,为何?
- Android 应用程序引用第三方jar问题
- Android重力感应之谈
- 如何播放 swf
- 我写了一个音乐播放器的widget,为什么在桌面更新不了?
- 求教!!关于SystemProperties.set在framework中不起作用的原因
- 求大神指教 viewPage适配listview 界面滑动很卡
- fragment奇怪的问题,求解答,在线狂等!
- android 百度地图 gps定位
- flipper的showNext和setDisplayedChild同时使用会冲突吗?
- 求助 android嵌入广告
通过这个数组的值来获取状态
CheckBox cb;//全局变量
public class ListAdapter extends ArrayAdapter<Group>{
int resource;
public ListAdapter(Context context, int _resource,
List textViewResourceId) {
super(context, _resource, textViewResourceId);
// TODO Auto-generated constructor stub
resource = _resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
RelativeLayout layout;
if(convertView == null){
layout = new LinearLayout(getContext());
String inflater = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater li =
(LayoutInflater) getContext().getSystemService(inflater);
li.inflate(resource, layout, true);
}else{
layout = (RelativeLayout) convertView;
}
cb = (CheckBox)layout.findViewById(R.id.add_group_name);
return layout;
}
} private OnClickListener bottonListener = new OnClickListener(){
public void onClick(View v) {
//对cb操作,数据库操作
}
}
请问对“对cb操作”怎么写代码呢?遍历listview中每行的checkbox查看状态?
不甚感激!
ArrayList<CheckBox> cbs = new ArrayList<CheckBox>();
//自定义内部类
public class ListAdapter extends ArrayAdapter{
int resource;
public ListAdapter(Context context, int _resource,
List textViewResourceId) {
super(context, _resource, textViewResourceId);
// TODO Auto-generated constructor stub
resource = _resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
RelativeLayout layout;
if(convertView == null){
layout = new LinearLayout(getContext());
String inflater = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater li =
(LayoutInflater) getContext().getSystemService(inflater);
li.inflate(resource, layout, true);
}else{
layout = (RelativeLayout) convertView;
}
CheckBox cb = (CheckBox)layout.findViewById(R.id.checkbox);
return layout;
}
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ListView lv = (ListView)findViewById(R.id.list_view);
ListAdapter la = new ListAdapter(MyGroupManage.this,R.layout.group_list,lg);
lv.setAdapter(la);
Button b = (Button)findViewById(R.id.button);
b.setOnClickListener(buttonListener)
} 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操作,删掉你想要的数据
}
}
}
这行没写好
lg指的是ArrayList lg = ArrayList();有什么问题再问吧,说的不是太清楚
cbs.add(cb);
如果我继承的是CursorAdapter类,那么bindView又是什么时候调用啊?
如果我用一个Cursor绑定到CursorAdapter上,是不是我Cursor里有几条getView和bindView就会被调用几次啊?
真是不太明白Adapter的机制……
CheckBox cb = (CheckBox)layout.findViewById(R.id.checkbox);
cbs.add(cb);
是放在getView里还是放在bindView里啊?
谢谢AspireHouse!!!
C:\Program Files\android-sdk-windows-1.5_r2\platforms\android-1.5\samples\ApiDemos\src\com\example\android\apis\view
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大小不等于总的行数呢?
急望指教
对于listview中应用checkbox的情况,我这有一个CheckListView类,通过这个类就可以很容易的达到删除listviewitem的效果。有兴趣的,可以去我的资源里找一下,资源名叫“CheckListView”
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呢 还有选任一项都把全部内容删了
在onItemClick()函数内执行CheckBox的动作即可.
不过自己要做个数组保存每行的选中状态,方便批量操作.
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;
}
}
}
好痛苦啊!我的列表内容始终显示不了,现在连删除也删不了了
哈哈,不用重写getView()也能实现多选.
在onItemClick()函数内执行CheckBox的动作即可.
不过自己要做个数组保存每行的选中状态,方便批量操作.
请问能具体点吗?有代码可以发一下吗?谢谢了
if(endCheckbox.isChecked())
{
...
......
}遍历一下显示的listview, 就可以读出listview中所有checkbox的状态。