我有Main活动,在此活动中我有一个ListView,其中包含从DB获取的项目。在这里,我有一个按钮添加新项目。当用户点击该按钮时,它会打开新活动。我正在使用Intent打开新活动,但我没有完成主要活动,因为新活动是对话框,我需要主要活动作为背景。
这里我可以在DB中添加新项目。添加项目时,我正在完成此活动。主要活动出现在屏幕上。问题是LitView未更新,因为此活动已在添加新项目之前创建。所以我想重新加载主要活动来更新ListView。但我不知道.....或有人能给我其他解决方案......
从DB填充ListView
public void PopulateListView() {
// Closing the cursor
// DEPRICATED!!
startManagingCursor(cursor);
// Set up mapping from cursor to view fields
String[] fromFieldNames = new String[] { DBAdapter.KEY_ITEM_NAME,
BAdapter.KEY_ITEM_USER, DBAdapter.KEY_ITEM_IMG, DBAdapter.KEY_ITEM_DATE_ADDED,
DBAdapter.KEY_ITEM_FAV };
int[] toViewIDs = new int[] { R.id.itemName, R.id.itemUser,
R.id.iconCopy, R.id.date, R.id.imgFav_M };
// Create adapter to map columns of DB to elements on UI
myCursorAdapter = new SimpleCursorAdapter(
this, // Context
R.layout.item_layout, // Row layout template
cursor, // Cursor (set of DB records)
fromFieldNames, // DB column names
toViewIDs // views ID to putt in list view
);
// Set the adapter for list view
myList.setAdapter(myCursorAdapter);
}
添加新项目活动
private void addItem() {
String get_name, get_username, get_pass, get_cat, get_note;
int imageID = imageIDs[random.nextInt(imageIDs.length)];
get_name = name.getText().toString();
get_username = username.getText().toString();
get_pass = pass.getText().toString();
get_cat = cat.getText().toString();
get_note = note.getText().toString();
if (get_name.equals(""))
{
Alert("Insert Name...");
}
else if (get_username.equals(""))
{
Alert("Insert Username...");
}
else if (get_cat.equals(""))
{
myDb.insertRowInItems(get_name, get_username,
get_pass, "Other", get_note, imageID, isFav);
}
else
{
myDb.insertRowInItems(get_name, get_username,
get_pass, get_cat, get_note, imageID, isFav);
}
finish();
}
答案 0 :(得分:0)
使用notifydatasetchanged
@Override
public void onResume(){
super.onResume();
this.ListAdapter.notifyDataSetChanged();
}
答案 1 :(得分:0)
您需要在ListView适配器上调用notifyDataSetChanged(),假设已更新与此适配器关联的集合。如果没有,则从数据库更新底层集合,然后调用notifyDataSetChanged()
http://developer.android.com/reference/android/widget/BaseAdapter.html#notifyDataSetChanged()
修改的
似乎解决方案是获取一个新的Cursor并在CursorAdapter上使用changeCursor()或swapCursor()来影响数据更改
Android SimpleCursorAdapter doesn't update when database changes