创建一个将在同一活动中使用的Parcelable

时间:2014-05-17 20:42:07

标签: android json arraylist parcelable

我导入了一些JSON数据并将其提取到自定义arrayList中。 arraylist看起来像这样:

ArrayList<HashMap<String, String>> postList;

一切正常,但如果方向改变,整个JSON解析/获取过程将重新开始。这就是我喜欢存储自定义ArrayList的原因。

我发现了很多关于(如何使用)Parcelable接口的信息,但它们都涵盖了从活动A到B的数据发送。

有人可以提供一个关于如何在同一活动中使用Parcelable的示例吗?提前谢谢!

2 个答案:

答案 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 -->

您可能需要手动处理某些事件的配置更改,但我从未发现它是必要的。