如何在包中传递 View 的对象列表

Posted

技术标签:

【中文标题】如何在包中传递 View 的对象列表【英文标题】:how to pass a list of objects of View in a bundle 【发布时间】:2017-05-04 16:06:18 【问题描述】:

我想保存视图“ArrayList”的 ArrayList 的内容。我覆盖了方法“onSaveInstanceState”,如下面的代码所示,但在运行时我收到下面发布的 logcat 错误。 请让他们知道如何在包中设置 View 对象列表

代码

@Override
protected void onSaveInstanceState(Bundle outState) 
    super.onSaveInstanceState(outState);
    Log.w(TAG, "onSaveInstanceState");

    if (this.mListViews != null && this.mListViews.size() > 0) 
        outState.putSerializable(KEY_LIST_OF_VIEWS, this.mListViews);
   
  

logcat

java.lang.RuntimeException: Parcel: unable to marshal value android.widget.ImageView8787bd0 V.ED..... ........ 20,20-1580,2247
                          at android.os.Parcel.writeValue(Parcel.java:1419)
                          at android.os.Parcel.writeList(Parcel.java:760)
                          at android.os.Parcel.writeValue(Parcel.java:1366)
                          at android.os.Parcel.writeArrayMapInternal(Parcel.java:687)
                          at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1330)
                          at android.os.Bundle.writeToParcel(Bundle.java:1079)
                          at android.os.Parcel.writeBundle(Parcel.java:712)
                          at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3753)
                          at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4704)
                          at android.os.Handler.handleCallback(Handler.java:739)
                          at android.os.Handler.dispatchMessage(Handler.java:95)
                          at android.os.Looper.loop(Looper.java:148)
                          at android.app.ActivityThread.main(ActivityThread.java:7331)
                          at java.lang.reflect.Method.invoke(Native Method)
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

【问题讨论】:

可以发一下arraylist的pojo类吗? 不要把 Views 放到 Bundle ... 只放数据 @Selvin 这是一个视图列表..每个项目都是一个视图 然后呢?你是根据一些数据制作的......发送数据而不是视图......你知道onSaveInstanceState不是用于保存持久数据 Selvin 也是对的,您可以只将原始数据类型放入 bundle 而不是视图 【参考方案1】:

您不应将视图保存在 savedInstanceState 中。您应该只保存列表视图的值。它会自动创建视图

【讨论】:

我没有保存视图...我想保存视图列表...列表中的每个项目都是一个视图 视图列表的意思是,视图对象对。?无论如何,你不应该这样做。视图是重量级的对象。并且当活动方向发生变化时,所有视图都将被销毁并自动重新创建。 很好..可以传递位图列表吗? 是的。但您将面临 OutOfMemory 错误。因为,每个位图可能都有很大的尺寸。

以上是关于如何在包中传递 View 的对象列表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用静态库传输资源文件(如何将资源包装在包中)?

R:我如何在包中添加额外的功能?

Oracle Sql 查询:如何在包中旋转函数 Sum()?

如何通过 GCM.send 在包中发送整数、布尔值

如何在不导入所有函数的情况下在包中使用 data.table?

如何在包中只导入没有 exec __init__.py 的子模块