带有删除/获取行ID复选框的Android ListView
我试图实现一个带有复选框的listview,这样当选中复选框时,列表行将被删除。我正在用光标填充listview,这工作正常,并且正在显示复选框 我遇到的问题是如何获取已选中框的行的_id 有人能告诉我如何实现这样的东西吗 列表视图和复选框带有删除/获取行ID复选框的Android ListView,android,listview,checkbox,Android,Listview,Checkbox,我试图实现一个带有复选框的listview,这样当选中复选框时,列表行将被删除。我正在用光标填充listview,这工作正常,并且正在显示复选框 我遇到的问题是如何获取已选中框的行的_id 有人能告诉我如何实现这样的东西吗 列表视图和复选框 Cursor cursor = db.getAllItems(); //String[] columns = new String[] {db.KEY_NAME, db.KEY_CODE, db.KEY_ROWID}; St
Cursor cursor = db.getAllItems();
//String[] columns = new String[] {db.KEY_NAME, db.KEY_CODE, db.KEY_ROWID};
String[] columns = new String[] {db.KEY_ITEM_NAME, db.KEY_MEASUREMENT, db.KEY_UNIT};
int[] to = new int[] {R.id.ingredientName, R.id.ingredientMeasurement, R.id.ingredientUnit};
final SimpleCursorAdapter myCursorAdapter = new SimpleCursorAdapter(this,R.layout.row4, cursor, columns, to, 0);
final ListView shoppingList = (ListView) findViewById(R.id.shoppingList);
shoppingList.setAdapter(myCursorAdapter);
CheckBox deleteCheck = (CheckBox)findViewById(R.id.checkBox1);
deleteCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (isChecked){
// How do I get the list item clicked to delete row?
}
}
});
XML-Row.4.XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="1">
<TextView
android:id="@+id/ingredientName"
android:layout_width="wrap_content"
android:textColor="#000000"
android:layout_height="wrap_content"
android:padding="5dp"
android:hint="wewewe"/>
<TextView
android:id="@+id/ingredientMeasurement"
android:textColor="#000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/ingredientName"
android:padding="5dp"
android:hint="fefefef"/>
<TextView
android:id="@+id/ingredientUnit"
android:textColor="#000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/ingredientMeasurement"
android:padding="5dp"
android:hint="qqqqq"/>
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:background="#fff"
android:text=""/>
</LinearLayout>
使用此自定义光标适配器,并在此适配器中单击此处更改的句柄
import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.SimpleCursorAdapter;
public class CustomAdapter extends SimpleCursorAdapter implements CompoundButton.OnCheckedChangeListener {
private Context mContext;
private Context appContext;
private int layout;
private Cursor cr;
private final LayoutInflater inflater;
public CustomAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
super(context, layout, c, from, to);
this.layout = layout;
this.mContext = context;
this.inflater = LayoutInflater.from(context);
this.cr = c;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return inflater.inflate(layout, null);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
super.bindView(view, context, cursor);
CheckBox checkBox1 = (CheckBox) view.findViewById(R.id.checkBox1);
checkBox1.setOnCheckedChangeListener(this);
int columnIndex = cursor.getColumnIndex(your column here);
int columnvalue = cursor.getInt(columnIndex);
checkBox1.setTag(columnvalue);
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int id = (Integer) buttonView.getTag();
}
}
您可以创建两种方法从listview中删除项,一种在适配器中,另一种在数据库中<代码>适配器.remove(item.getId(checkedId))并从数据库调用第二个方法
database.remove(item.getId(checkedId))
这就是从适配器和数据库中删除项的方式。感谢您的回答,只有一个问题,getId
函数,它将获得行的id
,还是数据库中实际的\U id
。getId
函数将获得您在listView中选择的对象的指定id。感谢您的回答,对于如何在列表活动中实现这一点,我有点困惑?您使用的是SimpleCorsOrAdapter,只需将其替换为此CustomAdapter,我希望它会起作用。还要为ingredientName设置值,选中复选框时,bindView方法和columnValue中的ingredientMeasurement和ingredientUnit将是您想要获取的id。我正在尝试在onCheckChange方法中执行一个简单的Toast,以查看id是否在更改,但无论按哪一行,它都保持不变,并且我无法删除特定的行,我是否遗漏了每行要更改的内容??checkBox1.setTag(columnvalue);检查这一行在bindView方法中设置了什么标记,它是相同的还是正在更改。