Android 删除数据库项后更新Listview

Android 删除数据库项后更新Listview,android,sqlite,listview,Android,Sqlite,Listview,我一直在尝试在删除一个项目后更新我的listview。以下是我目前掌握的情况: myList.setOnItemClickListener(new AdapterView.OnItemClickListener() { String str = null; public void onItemClick(AdapterView<?> arg0, final View view, int arg2, long arg3) {

我一直在尝试在删除一个项目后更新我的listview。以下是我目前掌握的情况:

myList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        String str = null;

        public void onItemClick(AdapterView<?> arg0, final View view, int arg2, long arg3) {

            //TextView txtview = (TextView)view.findViewById(R.id.txtview);
            final String item = ((TextView) view.findViewById(R.id.txtview)).getText().toString();
            str = item;
            final long arr = arg3;
            final String arg22 = longToString(arg3);

            //Creating an Alert Dialog
            AlertDialog.Builder builder = new AlertDialog.Builder(Home.this);
            builder.setMessage("Are you sure you want to delete the hike " + str + " ?");
            builder.setCancelable(false);
            builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {
                    SQLiteDatabase db1=openOrCreateDatabase("hikeManager", MODE_PRIVATE, null);
                    DatabaseHandler db = new DatabaseHandler(Home.this);
                    String table = "hikes";

                    Cursor c = db1.rawQuery("select id from "+ table + " where  name='"+item+"'", null);
                    int dhike = c.getColumnIndex("name") + 1;

                    try {
                        Hike hike = db.getHike(arr + 1);
                        db.deleteHike(hike);
                        Log.d("DLT", "Deleted hike at index " + arr);
                        //db.updateList(adapter, myList, listItems);
                        adapter.remove(arg22);
                        adapter.notifyDataSetChanged();
                        //updateData();
                        db.close();
                    } catch (CursorIndexOutOfBoundsException e) {
                        Log.d("DLT", "Failed to delete: " + e.getMessage());
                        db.close();
                    }
                    //db.updateList(adapter, myList, listItems);



                }
            });
            builder.setNegativeButton("No", new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                    dialog.cancel();
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        }
    });
myList.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
字符串str=null;
public void onItemClick(AdapterView arg0,最终视图,int arg2,long arg3){
//TextView txtview=(TextView)view.findViewById(R.id.txtview);
最后一个字符串项=((TextView)view.findViewById(R.id.txtview)).getText().toString();
str=项目;
最终长arr=arg3;
最终字符串arg22=longToString(arg3);
//创建警报对话框
AlertDialog.Builder=新建AlertDialog.Builder(Home.this);
setMessage(“您确定要删除远足“+str+”?”);
builder.setCancelable(false);
builder.setPositiveButton(“是”,新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
SQLiteDatabase db1=openOrCreateDatabase(“hikeManager”,MODE_PRIVATE,null);
DatabaseHandler db=新的DatabaseHandler(Home.this);
String table=“hikes”;
游标c=db1.rawQuery(“从“+table+”中选择id,其中name='“+item+”,null);
int dhike=c.getColumnIndex(“名称”)+1;
试一试{
加息=分贝加息(arr+1);
db.deleteHike(hike);
Log.d(“DLT”,“指数+arr时删除的涨价”);
//updateList(适配器、myList、listItems);
适配器。移除(arg22);
adapter.notifyDataSetChanged();
//更新数据();
db.close();
}捕获(游标索引自动边界异常e){
Log.d(“DLT”,“删除失败:”+e.getMessage());
db.close();
}
//updateList(适配器、myList、listItems);
}
});
setNegativeButton(“否”,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
//TODO自动生成的方法存根
dialog.cancel();
}
});
AlertDialog alert=builder.create();
alert.show();
}
});
我有相当多的未使用的代码在那里,因为我已经尝试了一些不同的方法来让它工作,但迄今为止都失败了。以下是更新数据:

private void updateData() {
    // Get all of the notes from the database and create the item list
    DatabaseHandler db = new DatabaseHandler(this);
    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.txtview, listItems);
    final ListView myList = (ListView) findViewById(R.id.cardListView);

    int num = db.getHikesCount();
    for (int i=1; i<num+1; ++i){
        Hike name = db.getHike(i);
        String nam = name.getName();
        listItems.add(nam);
    }
    myList.setAdapter(adapter);
    db.close();
}
private void updateData(){
//从数据库中获取所有注释并创建项目列表
DatabaseHandler db=新的DatabaseHandler(此);
最终ArrayAdapter=新的ArrayAdapter(此,R.layout.list_项,R.id.txtview,listItems);
最终ListView myList=(ListView)findViewById(R.id.cardListView);
int num=db.getHikeScont();
对于(inti=1;i只需使用

adapter.notifyDataSetChanged();

尝试将其用作onItemClick()中的最后一行。还有一件事,将适配器作为类变量,即在onCreate()之前声明它。在onCreate()中初始化它,以便可以在类中的任何位置使用它。将其用作最后一行不会产生任何更改。您必须删除arg2处的项,而不是arg3处的项。因此,请尝试adapter.remove(arg2);与以前的结果相同。可能是我的实现在某些地方出错了,导致了此问题。如果有帮助,我在Github()上有代码。