Java 在活动转换之间保存ArrayList

Java 在活动转换之间保存ArrayList,java,android,listview,arraylist,Java,Android,Listview,Arraylist,我在这里有很多麻烦 问题:我有两个活动A和B。在活动A中,我有一个带有自定义项的列表视图。我将这些项目的所有数据存储在ArrayList中。当用户单击listview项目时,活动B被称为显示该项目的详细信息。当用户返回活动A时,ListView中的所有项目都消失了。我知道我需要保存listview状态,所以我需要保存arraylist的数据 问题:如何解决这个问题 注意:我尝试了SaveInstanceState和onRestoreInstanceState,但由于这两个活动A和B之间的转换很快

我在这里有很多麻烦

问题:我有两个活动A和B。在活动A中,我有一个带有自定义项的列表视图。我将这些项目的所有数据存储在ArrayList中。当用户单击listview项目时,活动B被称为显示该项目的详细信息。当用户返回活动A时,ListView中的所有项目都消失了。我知道我需要保存listview状态,所以我需要保存arraylist的数据

问题:如何解决这个问题

注意:我尝试了SaveInstanceState和onRestoreInstanceState,但由于这两个活动A和B之间的转换很快,因此活动A不会被销毁。因此,我无法将ArrayList保存在bundle对象中。 我也尝试使用SharedPreferes和ContentValues,但这些类中没有一个支持包裹对象和列表

谢谢你的帮助

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    lstView = (ListView) findViewById(R.id.lstView);

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    if (ni != null && ni.isConnected())
        updateListView();
    registerClickCallback();
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    listResorces = savedInstanceState.getParcelableArrayList(LIST_RESOURCES);
    ArrayAdapter<Record> adapter = new BandejaoItemAdapter(listResorces);
    lstView.setAdapter(adapter);
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putParcelableArrayList(LIST_RESOURCES, listResorces);
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lstView=(ListView)findViewById(R.id.lstView);
ConnectivityManager cm=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_服务);
NetworkInfo ni=cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
如果(ni!=null&&ni.isConnected())
updateListView();
registerClickCallback();
}
@凌驾
RestoreInstanceState上的受保护无效(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
listResorces=savedInstanceState.getParcelableArrayList(列表资源);
ArrayAdapter=新的BandeJoItemAdapter(listResorces);
lstView.setAdapter(适配器);
}
@凌驾
SaveInstanceState上受保护的无效(束超出状态){
super.onSaveInstanceState(超出状态);
outState.putParcelableArrayList(列表资源、列表资源);
}

我猜您在
onResume()中进行了一些重置。
。你能发布相关代码吗?是的,我能!我将编辑我的问题。。。在一秒钟内,我没有覆盖所有
活动的onResume和onPause()方法?不,这还不是全部。。这正是处理活动转换的重要代码。我相信我已经找到了解决这个问题的办法。问题在于操作栏中的“向上”按钮没有像“后退”按钮那样执行操作,而是会破坏您以前的活动,然后重新创建它。对此,我相信解决方案是父活动android:launchMode=“singleTop”的清单文件中的一个属性。我也以“hack”的方式实现了SharedReferences,但我认为这样做不是一个好主意。现在,它的工作。。。