重新加载ListView - Android

时间:2014-04-06 20:46:23

标签: android listview

我有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();
}

2 个答案:

答案 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