刷新onResume()上的ListAdapter以更新列表,数据库更新无效

时间:2014-03-19 14:07:46

标签: android sqlite

以下是代码:

@Override
public void onResume() {
    super.onResume();
    adapter.notifyDataSetChanged();

    Log.d("onResumeMethod", "It is called! :)");
}
}

我在数据库中编辑任何内容时使用它来刷新列表。不幸的是它不起作用。我读过的某个地方我应该使用requery,但它已经被弃用了。有什么建议吗?

编辑:

已经尝试过,但没有帮助(不幸的是,因为我确信它会起作用):

@Override
public void onResume() {
    super.onResume();
    adapter = new ArrayAdapter<Friend>(this,
            android.R.layout.simple_list_item_1, list);
    this.getListView().setAdapter(adapter);
    this.getListView().invalidate();
}

我发现了另一个问题:如果我使用后退按钮(在模拟器上)返回桌面并尝试通过单击菜单项打开应用程序,它会向我显示:

03-19 15:43:50.153: E/AndroidRuntime(7374): FATAL EXCEPTION: main
03-19 15:43:50.153: E/AndroidRuntime(7374): java.lang.RuntimeException: Unable to start     
activity     
ComponentInfo{com.example.birthdayreminder/com.example.birthdayreminder.MainActivity}: 
java.lang.RuntimeException: Your content must have a ListView whose id attribute is 
'android.R.id.list'

之前我遇到过这个问题所以他们建议我把它插入我的xml:

 <ListView
 android:id="@android:id/list"
 android:layout_width="wrap_content"
 android:layout_height="match_parent" >
 </ListView>

2 个答案:

答案 0 :(得分:2)

您需要再次从数据库中获取数据。然后,您可以在列表视图中再次设置适配器并调用invalidate(),如下所示:

@Override
public void onResume() {
    super.onResume();

    adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, db.getMyData());

    myListView.setAdapter(adapter);

    myListView.invalidate();
}

db.getMyData()是从数据库获取数据的方法,而myListViewListView

希望它有所帮助!

答案 1 :(得分:0)

覆盖notifyDataSetChanged

@Override
public void notifyDataSetChanged() {
    super.notifyDataSetChanged();

    myArray.clear();
    /* load the data again */
    myArray = yourMethodToLoadData();
}