You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中不重载Activity更新GridView列表项背景色方案咨询

你当前直接调用notifyDataSetChanged不生效的核心原因是修改数据库后未同步更新内存中Adapter绑定的List集合内对应数据的状态,同时你的SQL更新语句存在语法错误,按以下步骤修改即可实现无Activity重启的UI刷新:

步骤1:修复SQLiteHelper的更新语句错误

你当前的update语句重复定义了两次card_scanning_status字段,属于语法错误,修改excludeData方法:

public void excludeData(int i, int status) {
    // 状态反转
    int targetStatus = status == 0 ? 1 : 0;
    int idd = i+1;
    SQLiteDatabase database = getWritableDatabase();
    // 删掉重复的字段声明
    String sql = "UPDATE CgList SET card_scanning_status = ? WHERE id = ? ";
    SQLiteStatement statement = database.compileStatement(sql);
    statement.bindLong(1, targetStatus);
    statement.bindLong(2, idd);
    statement.execute();
    database.close();
}

步骤2:修改弹窗点击逻辑,同步更新内存数据

修改InventoryList Activity中SweetAlert的setCancelClickListener逻辑,移除Activity跳转代码,更新对应列表项数据后调用刷新即可:

.setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
    @Override
    public void onClick(SweetAlertDialog sDialog) {
        if (id_image.length ==1){
            Toasty.error(getApplicationContext(),"Update data first ", Toasty.LENGTH_SHORT).show();
            sDialog.dismiss();
        }
        else{
            // 更新数据库状态
            sqLiteHelper.excludeData(i,status);
            // 同步更新内存中对应Inventory对象的状态
            Inventory targetItem = list.get(i);
            targetItem.setStatus(status == 0 ? 1 : 0);
            // 刷新列表,也可以调用adapter.notifyDataSetChanged()刷新全部,性能要求高可以只刷新对应项
            adapter.notifyDataSetChanged();
            // 弹出原逻辑的成功提示
            Toasty.success(InventoryList.this,DialogStatus+"d", Toasty.LENGTH_SHORT).show();
            sDialog.dismiss();
        }
    }
})

可选优化项

当前Adapter的getView方法每次执行都会查询DarkMode状态的数据库,频繁触发会影响列表滑动流畅度,建议将DarkMode状态查询逻辑移到Activity的onCreate中执行,将结果作为参数传给Adapter,无需每次绘制列表项都查库。


内容的提问来源于stack exchange,提问作者CarlJade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:36:04