我导入了一些JSON数据并将其提取到自定义arrayList中。 arraylist看起来像这样:
ArrayList<HashMap<String, String>> postList;
一切正常,但如果方向改变,整个JSON解析/获取过程将重新开始。这就是我喜欢存储自定义ArrayList的原因。
我发现了很多关于(如何使用)Parcelable接口的信息,但它们都涵盖了从活动A到B的数据发送。
有人可以提供一个关于如何在同一活动中使用Parcelable的示例吗?提前谢谢!
答案 0 :(得分:0)
您应该在线搜索onSaveInstanceState
,这是在Activity
类中定义的回调。
当您需要在活动之间传递数据时,它的工作方式相同
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
}
在outState
内,您将使用普通的Bundle方法传递Strings,Integers和Parcelable值(putParcelableArrayList / putParcelable / putParcelableArray)。
当屏幕旋转或某些事情发生时(活动被破坏等),可以调用此方法,当重新创建活动时,您在此处使用的包将被传递到onCreate
内的savedInstanceState
参数(onCreate
,Bundle的唯一参数)。
在onCreate
内,您检查if (savedInstanceState != null)
以确保您已保存状态,如果确实您使用savedInstanceState.getParcelableArrayList
(或其他内容,取决于您想要获得的内容)回读清单。
if (savedInstanceState != null)
{
ArrayList<Parcelable> parcelableArrayList = savedInstanceState.getParcelableArrayList("key");
}
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putParcelableArray(myParcelableList);
}
答案 1 :(得分:0)
一切正常,但如果方向改变,整个JSON解析/获取过程将重新开始。这就是我喜欢存储自定义ArrayList的原因。
您提到您的定位会导致整个过程在Activity
中重新启动。你在onCreate
方法中运行json ...等吗?如果是这种情况,则方向更改会导致onCreate
被调用。
您可以修改onCreate
以处理当前活动的方向更改(查找AndroidManifest.xml
)来阻止调用android:configChanges
:
<activity
android:name="your.activity.package.andclass"
android:configChanges="orientation|screenSize">
<!-- etc -->
您可能需要手动处理某些事件的配置更改,但我从未发现它是必要的。