我的应用包含列表视图。 listview中的每个项目都有一个删除按钮。但删除按钮无法删除列表视图中的项目。请告诉我如何删除列表视图中的项目以及database.my。
我的来源:
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.sharefolioedit);
Log.e("string",s.toString());
add = (ImageButton) findViewById(R.id.add);
add.setOnClickListener(this);
done = (Button) findViewById(R.id.done);
done.setOnClickListener(this);
getList();
}
public void onCreate1(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
delete= (ImageButton) findViewById(R.id.delete);
delete.setOnClickListener(this);
}
protected void onListItemClick(ListView l, ImageButton delete, int position,long id) {
super.onListItemClick( l, delete, position, id);
ID=id;
final Integer index =l.getSelectedItemPosition();
Log.e("delete method","delete");
Log.e("ID value",index.toString());
new AlertDialog.Builder(ShareFolioEditActivity.this)
.setTitle("Delete")
.setMessage("Are you sure ??? ")
.setNeutralButton("no",null)
.setPositiveButton("yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
confirmdelete(index);
}
}) .show();
}
public void myClickHandler(View v) {
{
// int position = 0;
// onListItemClick(lv, delete, position, ID);
// ID=id;
Log.e("delete method","delete");
final Integer a = new Integer(v.getId());
Log.e("ID value",a.toString());
new AlertDialog.Builder(ShareFolioEditActivity.this)
.setTitle("Delete")
.setMessage("Are you sure ??? ")
.setNeutralButton("no",null)
.setPositiveButton("yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
confirmdelete(a);
}
}) .show();
}
}
public void onClick(View v) {
if(v.equals(add))
{
Intent in=new Intent(ShareFolioEditActivity.this,AddCategory.class);
startActivity(in);
}
if(v.equals(done))
{
Intent i=new Intent(ShareFolioEditActivity.this,ShareFolioActivity.class);
startActivity(i);
}
}
public void confirmdelete(int index)
{
db.delete("sharelist", "_id="+index, null);
Toast.makeText(this, "row deleted"+index, Toast.LENGTH_SHORT).show();
Bundle b=null;
onCreate(b);
}
public void getList()
{ int x = 0;
String where=null;
csh=new createSqliteHelper(this);
try{
//db.open();
db=csh.getReadableDatabase();
}catch(Exception e){
System.out.println(e);
}
if (Intent.ACTION_SEARCH.equals(getIntent().getAction())) {
where=getIntent().getStringExtra(SearchManager.QUERY);
x=1;
}
if(x==1)
{
cur=db.rawQuery("SELECT * FROM sharelist where category LIKE '%"+where+"%'",null);
}else{
cur=db.rawQuery("SELECT * FROM sharelist ORDER BY category",null);}
Log.e("cursor",cur.toString());
SimpleCursorAdapter list=new SimpleCursorAdapter(this,R.layout.edititems,cur,s,i );
getListView();
setListAdapter(list);
}
}
sharefolioedit xml布局是
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/text"
android:text="CATEGORIES"
android:layout_centerHorizontal="true"
/>
<Button
android:id="@+id/done"
android:text="Done"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_width="90px"
android:layout_height="20px"
android:layout_above="@id/android:list" />
<ImageButton
android:id="@+id/add"
android:text="Add"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_width="80px"
android:layout_height="20px"
android:layout_above="@id/android:list"
android:src="@drawable/addicon"/>
<ListView android:layout_width="500px"
android:layout_height="700px"
android:id="@id/android:list"
android:layout_alignParentBottom="true"
/>
</RelativeLayout>
edititems.xml是
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageButton
android:id="@+id/delete"
android:layout_width="70px"
android:paddingLeft="2px"
android:paddingRight="2px"
android:paddingTop="2px"
android:text="Delete"
android:layout_height="wrap_content"
android:onClick="myClickHandler"
android:src="@drawable/removeicon"
/>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:padding="10sp">
<TextView
android:id="@+id/category"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:layout_toRightOf="@+id/catagory"
/>
</RelativeLayout>
</LinearLayout>
在edititems.xml中我也定义了一个删除按钮,所以请检查并告诉我解决方案。
答案 0 :(得分:4)
在confirmdelete
方法中,db.delete
使用AsyncTask
查询数据库并在Cursor
方法中获取新的doInBackground
。然后在您changeCursor
上的onPostExecute
方法调用SimpleCursorAdapter上调用list
,该调用应该是类级字段而不是本地字段,因此您的所有方法都可以访问它。这将告诉ListView适配器中的数据已更改,并且需要自行刷新。您无需在底部的onCreate
方法中致电confirmdelete
。
以下是一些代码:
private class UpdateCursor extends AsyncTask<Void, Void, Cursor> {
protected Cursor doInBackground(URL... urls) {
Cursor result = db.query(...);
return result;
}
protected void onPostExecute(Cursor result) {
list.changeCursor(result);
}
}
祝你好运。