我知道关于这个主题的帖子很多,我想我已经看完了,但是没有一个对我有帮助...

我在一个活动中有一个ListView,其中填充了来自数据库的游标,并且一切正常。

然后,我在屏幕上有一个按钮,该按钮开始一个新活动,用户可以在其中向列表添加新条目。

完成此操作后,将重新显示第一个活动,但最近添加的条目不在列表中。如果我停止并重新启动该应用程序,则正确显示新条目。

我尝试了几种变体-没有一个会产生任何错误。

这是我的主要代码:

public class FirstScreenActivity extends ListActivity {

public static String TAG = "My App:";

//This is the Adapter being used to display the list's data
public SimpleCursorAdapter vehAdapter;

    static final String[] PROJECTION = new String[] {dbMain.ENTRY_ID, dbMain.VEHICLE_NAME};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Create/prepare database
    mpgDBHelper mpgDBhelp = new mpgDBHelper(this.getBaseContext());
    SQLiteDatabase mpgDB = mpgDBhelp.getWritableDatabase();

    //Display vehicles available - first get any entries

    Cursor mpgCur = mpgDB.query(dbMain.TABLE_NAME, PROJECTION, null, null, null, null, null);

    // build a listView
    String[] fromColumns = {dbMain.VEHICLE_NAME};
    int[] toViews = {android.R.id.text1};

    vehAdapter = new SimpleCursorAdapter(this,
                android.R.layout.simple_list_item_1, mpgCur, fromColumns, toViews, 0);
    setListAdapter(vehAdapter);
    setContentView(R.layout.activity_first_screen);
}

public void createNewVeh(View view) {
    // create intent to start another activity
    Intent newVehIntent = new Intent(this, createNewVehicleActivity.class);

    startActivity(newVehIntent);

    // I have tried putting the update lines here but also did not work
}

@Override
public void onResume() {

    super.onResume();

        Log.v(TAG, "In onResume...about to reset list");

    // Refresh ListAdaptor
        //vehAdapter.getCursor(); <-- this doesn't work either
    vehAdapter.notifyDataSetChanged();

}


在其他活动的代码中,我只使用:

finish();


...在数据库插入之后。

我从onResume获取日志消息-有什么建议吗?

最佳答案

数据更改后,您应该再次获取游标,然后将其与当前游标交换并通知适配器更改:

Cursor mpgCur = mpgDB.query(dbMain.TABLE_NAME, PROJECTION, null, null, null, null, null);
vehAdapter.swapCursor(mpgCur);
vehAdapter.notifyDataSetChanged();


无需再次创建适配器。

10-04 23:08
查看更多