如何避免在从同一活动切换到另一个活动时清除Listview数据

时间:2015-04-22 13:02:57

标签: java android listview android-listview

我正在使用适配器,其中我的数据存储在arraylist中并添加到适配器中,因此我在ui线程中调用适配器,因此当用户单击开始按钮时,此适配器会调用。当用户切换到另一个活动时相同并返回相同的活动我的列表视图已被清除。 这是按钮功能,点击它会启动服务。

Adapter = new MyTrip_listview_Adapter(MyTrip.this, location, Date_Array, imagesview, j, context, arrayplaces);
listViewplace.setAdapter(adapter);
listViewplace.setSelection(location.size() - 1);
adapter.notifyDataSetChanged();

因此它每5分钟调用一次这个适配器

我的适配器是

var e1 = {
    name: 'Jack',
    surname: 'Root'
};

2 个答案:

答案 0 :(得分:0)

根据您在问题中提供的有限信息,每次用户从其他活动返回时,看起来您的活动与列表正在重新创建。 在这种情况下,您需要保留Activity的状态。为此,在onSaveInstanceState()中保存适配器中的数据,然后在onCreate()中检查是否从先前状态恢复并重新填充列表。以下是详细的操作方法:http://developer.android.com/training/basics/activity-lifecycle/recreating.html

以下是示例代码(来自内存):

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_layout);

    if (savedInstanceState != null) {
        // First restore the content
        ArrayList<String> tmp = savedInstanceState.getParcelableArrayList("ArrayListData");
            myArrayList.addAll(tmp);
        listAdapter.notifyDataSetChanged();
        // Then restore the state
        Parcelable l_state = savedInstanceState.getParcelable("ListState");
        listView.onRestoreInstanceState(l_state);
        } else {
        // Probably initialize listview with default values for a new instance
        }

}

@Override
protected void onSaveInstanceState(Bundle state) {
    super.onSaveInstanceState(state);

    state.putParcelableArrayList("ArrayListData", myArrayList);

    Parcelable mListState = listView.onSaveInstanceState();
    state.putParcelable("ListState", mListState);
}

答案 1 :(得分:0)

我想我已经了解你了。

当你从另一项活动中回来时,你不需要在listview上丢失数据,不是吗?

好的,你必须处理这个问题:

public boolean onOptionsItemSelected(MenuItem menuItem) {
switch (menuItem.getItemId()) {
    case android.R.id.home:
        Intent homeIntent = getIntent();
        startActivity(homeIntent);
}
return (super.onOptionsItemSelected(menuItem));

我不能在我的IDE上尝试这个,因为我已经出去了,但我认为就是这样。

如果不起作用,请告诉我。