将数据从对话框插入 SQLi 后自定义列表视图不刷新
Posted
技术标签:
【中文标题】将数据从对话框插入 SQLi 后自定义列表视图不刷新【英文标题】:Custom listview not refresh after insert data from dialog to SQLi 【发布时间】:2019-02-17 21:01:39 【问题描述】:我从这样的对话框向 SQLi 插入数据
builder.setPositiveButton("OK", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialogInterface, int i)
ContentValues cv = new ContentValues();
cv.put(DBHelper.COL_VEHICLE_TYPE, 1);
cv.put(DBHelper.COL_OPTION_NAME, "driver");
cv.put(DBHelper.COL_DATE, mDisplayDate.getText().toString());
db.insert(DBHelper.TABLE_NAME, null, cv);
cursor.requery();
adapter.notifyDataSetChanged();
);
我在函数 onResume() 中查询数据以显示在这样的列表视图中。
public void onResume()
super.onResume();
lst_driver.clear();
db = dbHelper.getWritableDatabase();
String[] queryColumns = new String[]"_id", DBHelper.COL_VEHICLE_TYPE, DBHelper.COL_OPTION_NAME,DBHelper.COL_DATE ;
cursor = db.query(DBHelper.TABLE_NAME, queryColumns, null,null,
null,null,null);
HashMap<String,String> map ;
String vh_name;
while(cursor.moveToNext())
map = new HashMap<String,String>();
vh_name= dbHelper.VehicleType(cursor.getString(1));
map.put("vehicle_type", vh_name);
map.put("date", cursor.getString(3));
lst_driver.add(map);
String[] showColumns = new String[]"vehicle_type", "date";
int[] views = new int[] R.id.ColType, R.id.ColDate;
adapter = new SimpleAdapter(DriverLicenseActivity.this,lst_driver, R.layout.activity_list_layout, showColumns, views);
lv_driver.setAdapter(adapter);
adapter.notifyDataSetChanged();
插入数据后,它不会显示在列表视图中。我必须再次打开此活动,然后它将出现在列表视图中。插入 SQLi 后如何在列表视图中显示数据?
【问题讨论】:
在 ArrayList 中添加项目后,您是否使用过notifyDataChanged()
也添加你的 Adapter 类
首先检查是否调用了 resume 方法?并发布适配器
【参考方案1】:
您可以在一个功能中创建数据获取,然后在从onClick
和onResume()
插入数据后调用它
private void getData()
lst_driver.clear();
db = dbHelper.getWritableDatabase();
String[] queryColumns = new String[]"_id", DBHelper.COL_VEHICLE_TYPE, DBHelper.COL_OPTION_NAME,DBHelper.COL_DATE ;
cursor = db.query(DBHelper.TABLE_NAME, queryColumns, null,null,
null,null,null);
HashMap<String,String> map ;
String vh_name;
while(cursor.moveToNext())
map = new HashMap<String,String>();
vh_name= dbHelper.VehicleType(cursor.getString(1));
map.put("vehicle_type", vh_name);
map.put("date", cursor.getString(3));
lst_driver.add(map);
String[] showColumns = new String[]"vehicle_type", "date";
int[] views = new int[] R.id.ColType, R.id.ColDate;
adapter = new SimpleAdapter(DriverLicenseActivity.this,lst_driver, R.layout.activity_list_layout, showColumns, views);
lv_driver.setAdapter(adapter);
adapter.notifyDataSetChanged();
然后在您的onResume
上调用它,并在您从onClickListener
插入数据之后:
public void onResume()
getData();
builder.setPositiveButton("OK", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialogInterface, int i)
ContentValues cv = new ContentValues();
cv.put(DBHelper.COL_VEHICLE_TYPE, 1);
cv.put(DBHelper.COL_OPTION_NAME, "driver");
cv.put(DBHelper.COL_DATE, mDisplayDate.getText().toString());
db.insert(DBHelper.TABLE_NAME, null, cv);
cursor.requery();
getData();
);
【讨论】:
【参考方案2】:您的 onResume 方法似乎在 SQLite 插入之前被调用。我建议您将更新适配器的部分分开,并在插入后立即调用此方法。
【讨论】:
以上是关于将数据从对话框插入 SQLi 后自定义列表视图不刷新的主要内容,如果未能解决你的问题,请参考以下文章