我有一个简单的列表视图,由用户输入填充。在单击OK
按钮之前,用户单击浮动按钮以显示其信息对话框。单击按钮时,我希望更新列表。我一直在使用notifyDataSetChanged()
,但这不起作用。什么是更新是当我离开活动并重新输入它时,但显然这不是我想要做的。
有人可以查看我的代码,看看我哪里出错吗?
MyCursorAdapter
db.open();
db.getAllRecipes();
Cursor cursor = db.getAllItems();
//String[] columns = new String[] {db.KEY_NAME, db.KEY_CODE, db.KEY_ROWID};
String[] columns = new String[] {db.KEY_ITEM_NAME};
int[] to = new int[] {R.id.ingredientName};
final SimpleCursorAdapter myCursorAdapter = new SimpleCursorAdapter(this,R.layout.row4, cursor, columns, to, 0);
列表和按钮侦听器
final ListView shoppingList = (ListView) findViewById(R.id.shoppingList);
shoppingList.setAdapter(myCursorAdapter);
FloatingActionButton filterButton = (FloatingActionButton) findViewById(R.id.filterButton);
filterButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// custom ingredient_dialog
final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.shopping_dialog);
dialog.setTitle("Add Item");
final EditText item = (EditText) dialog.findViewById(R.id.item);
Spinner measurement = (Spinner) dialog.findViewById(R.id.measurement);
Spinner unit = (Spinner) dialog.findViewById(R.id.unit);
Button dialogButtonOk = (Button) dialog.findViewById(R.id.dialogButtonOK);
// if button is clicked, close the custom ingredient_dialog
dialogButtonOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String newItem = item.getText().toString();
db.open();
db.insertItem(newItem);
myCursorAdapter.notifyDataSetChanged();
dialog.dismiss();
}
});
答案 0 :(得分:0)
在单击按钮上,您将项目插入数据库,但无法重新填充适配器。这就是为什么listview没有更新的原因。
更新数据后,您需要从数据库中获取数据,然后调用notifyDataSetChanged()
。
简而言之,在将数据插入数据库之后,需要调用适配器创建代码。这样做就完成了。