将记录插入数据库后更新listview时出现问题。
OnCreate,我将数据从数据库加载到listview,如下所示:
Cursor c = db.getAllCategory();
List<String> l = db.getItemByFilteredCategory();
//add total goals that match with each category
if (c.moveToFirst()) {
do {
int totalGoals = db.getMyGoalByCat(c.getInt(0)).getCount();
db.updateCategory(c.getInt(0), c.getString(1), c.getString(2), totalGoals);
} while (c.moveToNext());
}
//update category list
c = db.getAllCategory();
//add items to list
ListAdapter adapter = new SimpleCursorAdapter(this,
R.layout.custom_categorylist,
c,
new String[]{"_id", "categoryName", "categoryDescription", "totalGoals"},
new int[]{R.id.customViewCatId, R.id.customViewCategory, R.id.customViewCatDescription, R.id.customViewTargetNumber});
lv.setAdapter(adapter);
在同一个活动中,我有一个按钮。单击该按钮时,我会显示一个包含2个按钮的对话框:创建和取消。
如果单击“创建”按钮,我会将新数据插入数据库并关闭对话框。
btnAddCategory.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Dialog dialog = new Dialog(MainActivity.this);
dialog.setContentView(R.layout.custom_create_category);
dialog.setTitle("Create new category");
dialog.show();
Button btnCancel = (Button) dialog.findViewById(R.id.btnCancelCategory);
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
final EditText etCatName = (EditText) dialog.findViewById(R.id.etCatName);
final EditText etCatDescription = (EditText) dialog.findViewById(R.id.etCatDescription);
Button btnCreate = (Button) dialog.findViewById(R.id.btnCreateCategory);
btnCreate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DBAdapter dbSub = new DBAdapter(getApplicationContext());
dbSub.openDB();
dbSub.insertCategory(etCatName.getText().toString(),etCatDescription.getText().toString(), 0);
dbSub.closeDB();
dialog.dismiss();
}
});
}
});
那一刻,我将使用listview返回主Activity。如何在此步骤中获取listview更新?
干杯,
答案 0 :(得分:1)
要更新列表中的数据,您必须调用 adapter.notifyDataSetChanged()。
答案 1 :(得分:0)
如果onClickListener位于onCreate
中btnCreate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DBAdapter dbSub = new DBAdapter(getApplicationContext());
dbSub.openDB();
dbSub.insertCategory(etCatName.getText().toString(),etCatDescription.getText().toString(), 0);
dbSub.closeDB();
adapter.notifyDataSetChanged();
dialog.dismiss();
}
});
除非
btnCreate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DBAdapter dbSub = new DBAdapter(getApplicationContext());
dbSub.openDB();
dbSub.insertCategory(etCatName.getText().toString(),etCatDescription.getText().toString(), 0);
dbSub.closeDB();
lv.getAdapter().notifyDataSetChanged();
dialog.dismiss();
}
});
希望这可以提供帮助。