求大神,安卓中,如何动态更新ListView?

我在listview中的点击长按事件中删除了一条数据,就是在sqlite里删掉了,怎么能立即刷新listview呢?

listview我用cursorAdapter

求大神解答,谢谢了,没有c币了,实在不好意思~

 package com.chase.cn.demon;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

/**
 * Created by Chase on 2016/11/10.
 */
public class BillActivity extends Activity {
    private ListView billListView;
    private MySQLiteOpenHelper sqLiteOpenHelper;
    private SQLiteDatabase mDataBase;
    private SimpleCursorAdapter billAdapter;
    private boolean flag = true;


    // 存储数据的数组列表
  //  ArrayList<HashMap<String, Object>> listData;
    // 适配器

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.bill);

        sqLiteOpenHelper = new MySQLiteOpenHelper(BillActivity.this, "finance.db", null, 1);
        mDataBase = sqLiteOpenHelper.getReadableDatabase();
        final Cursor c = mDataBase.rawQuery("select * from finance", null);
        Log.i("database", "data" + mDataBase.isOpen());
                billListView = (ListView) findViewById(R.id.bill_listView);

        billAdapter = new SimpleCursorAdapter(BillActivity.this,
                R.layout.bill_item,
                c,
                // ListItem的XML实现
                // 动态数组与Item对应的子项
                new String[]{"Time", "Fee", "Budget", "Type"},
                // ImageItem的XML文件里面的一个ImageView,两个TextView ID
                new int[]{R.id.billItem_time, R.id.billItem_money, R.id.billItem_budget, R.id.billItem_type});

        billListView.setAdapter(billAdapter);





        //item监听
        billListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {

                    String cc = c.getString(c.getColumnIndex("_id")); //用cursor得到对应表中的id
                    Log.i("info", "cc=  " + cc);
                    Toast.makeText(BillActivity.this, "删除了", Toast.LENGTH_SHORT).show();
                    //删除表中的对应id的行
                    mDataBase.execSQL("delete from finance where _id="
                            + cc);

自己琢磨了,不单单要notifydadasetChanged 最重要的是要重新查询一下

 (billAdapter.getCursor()).requery();
                billAdapter.notifyDataSetChanged();

如果用这个办法只能删除一条刷新显示 然后再继续删除就出异常, 异常说 以前那个cursor c已经关闭了

  Cursor newc = mDataBase.rawQuery("select * from finance", null);
                     billAdapter.changeCursor(newc);

你可以先删除加载的数据项。界面上做删除操作。代码在执行删除功能。而不是等待删除了成功了在重新载入数据。

listview有刷新的方法,datachange

notifyDataSetChanged();

两种解决办法:1.重新实例化一个adapter对象,在重新设置adapter;2. 调用c.requery(); adapter.notifyDataSetChanged();

删除之后重新查询下 获取的数据传入适配器 然后listview重新设置adapter 我就是这样干的

删除操作完成之后紧接着就对适配器调用notifyDataSetChanged();方法就可以了

删除操作完成数据一定要更新,紧接着就对适配器调用notifyDataSetChanged();方法就可以了