gpt4 book ai didi

android - 更新数据库sqlite后更新listview

转载 作者:太空狗 更新时间:2023-10-29 13:31:52 25 4
gpt4 key购买 nike

如何在更新数据库 sqlite 上的行后更新 ListView 中的项目。我放了 notifyDataSetChanged() 但没有成功,没有错误,但没有刷新行中的数据。如果我返回菜单并再次打开列表,数据将会改变。所以我想在更新数据后更新行中的数据。在下面构建我的代码,谢谢。

CustomBaseAdapter adapter;
ListView cListView;

在onCreate中:

cListView = (ListView) findViewById(R.id.list_category);
List<ItemsArtikel> rowItems = (List<ItemsArtikel>) db.getAllCategory(katname);
adapter = new CustomBaseAdapter(this, rowItems);
cListView.setAdapter(adapter);

查询列表类别:

public List<ItemsArtikel> getAllCategory(String cat) {
SQLiteDatabase db = this.getWritableDatabase();
List<ItemsArtikel> cList = new ArrayList<ItemsArtikel>();
String selectQuery = "SELECT * FROM " + TABLE_CAT + " WHERE "
+ COLOM_KAT + "=\"" + cat + "\"";
Cursor c = db.rawQuery(selectQuery, null);
c.moveToFirst();
if (c.getCount() > 0) {
do {
ItemsArtikel kat = new ItemsArtikel();
kat.setID(c.getLong(c.getColumnIndex(COLOM_ID)));
kat.setName(c.getString(c.getColumnIndex(COLOM_NAME)));
kat.setLink(c.getString(c.getColumnIndex(COLOM_LINK)));
kat.setImage(c.getString(c.getColumnIndex(COLOM_IMAGE)));
kategoriList.add(kat);
} while (c.moveToNext());
}
return cList;
}

在我使用 for listview 后,for 下载图像并在下载图像时使用 AsyncTask 更新数据库的每一行。图片成功下载,行也成功更新,只是不在 ListView 中刷新。

这是下载图片时onPostExecute的代码:

@Override
protected void onPostExecute(HashMap<String, Object> result) {
String id = (String) result.get("id");
String path = (String) result.get("image");

// update row in database
db.updateRowCategory(id, path);

cListView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}

最佳答案

调用notifyDataSetChanged()它只会通知注册 View 更新内容以反射(reflect)更改。

在您的情况下,您更新的是 Database 中的数据,而不是 Adapter Data 模型中的数据。要反射(reflect) ListView 中的更改,您需要更新 Adapter 的 数据模型,然后调用 notifyDataSetChanged();

如果您直接从数据库呈现数据,请使用 CursorAdapter并实现 onContentChanged () 来更新 ListView

关于android - 更新数据库sqlite后更新listview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14867324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com