android - 将数据从对话框插入 SQLi 后自定义列表视图不刷新
问题描述
我从这样的对话框中将数据插入 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 后如何在列表视图中显示数据?
解决方案
您可以在一个功能中创建数据获取,并在插入数据后简单地调用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();
}
});
推荐阅读
- json - How to get only numbers from a string
- date - 有没有办法在谷歌表格的下拉列表中格式化和排序日期?
- python - How to create a queue class for queuing some lists?
- javascript - 如何修复运行两次功能但仅被调用一次的输入键的按键事件
- php - Laravel input number allow double values
- php - Make my php wait the end of my python script
- python - 我遇到的问题是我不知道如何使用分配的键绑定来移动我的 Sprite?
- javascript - How to convert an email message from ISO-8859-1 to UTF8 string in Javascript?
- wordpress - WordPress:使用自定义 Gutenberg 块嵌入代码
- angular7 - After importing bootstrap into app.module.ts, unexpected token < error araises