包裹:无法编组值 android.widget.RelativeLayout

Parcel: unable to marshal value android.widget.RelativeLayout

我想在 ResultActivity.class 传递的一种数据类型(ViewGroup 的 ArrayList)有问题。此 ViewGroup 包含通过 xml.

创建的布局块

此块中的一个已存在于 IPActivity class 管理的主布局中,它在 java 代码中的名称是 mFirstBlock。在我将 mFirstBlock 插入 arrayList 之后。然后用户可以使用按钮添加一个相同的新块。我在 arrayList.

中添加的所有这些块

这是布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    <TextView
        android:id="@+id/textView_link_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ...

    <EditText
        ...

    <TextView
        ...

    <EditText
        ...

    <ImageButton
        ...

</RelativeLayout>

这是 java 代码:

public class IPActivity extends AppCompatActivity {

    private static final String EXTRA_BLOCKS = "...";

    ArrayList<ViewGroup> mBlockLinks; //contiene i blocchi (i link con le info)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        final LinearLayout myContainer = (LinearLayout) findViewById(R.id.my_container); //layout presente nell'mainLayout
        mBlockLinks = new ArrayList<>();

        mFirstBlock = (ViewGroup) findViewById(R.id.first_block);//R.id.first_block is the id layout of the block that I include in main Layout
        mDeleteLink = (ImageButton) mFirstBlock.findViewById(R.id.imageButton_delete_link);
        mDeleteLink.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                myContainer.removeView((View) v.getParent());
                mBlockLinks.remove( v.getParent());
            }
        });

        mBlockLinks.add(mFirstBlock);

        mAddLink = (Button) findViewById(R.id.button_add_link);
        mAddLink.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                ViewGroup new_block = (ViewGroup) LayoutInflater.from(v.getContext()).inflate(R.layout.layout_block_input, myContainer, false);
                myContainer.addView(new_block);
                mBlockLinks.add(new_block);

                mDeleteLink = (ImageButton) new_block.findViewById(R.id.imageButton_delete_link);
                mDeleteLink.setOnClickListener(new OnClickListener() {
                    //cancello il link relativo al bottone
                    @Override
                    public void onClick(View v) {
                        myContainer.removeView((View) v.getParent());
                        mBlockLinks.remove( v.getParent());
                    }
                });

            }
        });

        mResult = (Button) findViewById(R.id.button_subnetting);
        mResult.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(v.getContext(),ResultActivity.class);
                intent.putExtra(EXTRA_BLOCKS,mBlockLinks);
                startActivity(intent); //the line where appear the Exception
            }
        });
    }
}

我只写了对我来说最重要的代码来解决这个问题。

Logcat 错误如下:

FATAL EXCEPTION: main
java.lang.RuntimeException: Parcel: unable to marshal value android.widget.RelativeLayout{42763ed8 V.E..... ......I. 0,176-656,352}
  at android.os.Parcel.writeValue(Parcel.java:1235)
  at android.os.Parcel.writeList(Parcel.java:622)
  at android.os.Parcel.writeValue(Parcel.java:1195)
  at android.os.Parcel.writeMapInternal(Parcel.java:591)
  at android.os.Bundle.writeToParcel(Bundle.java:1646)
  at android.os.Parcel.writeBundle(Parcel.java:605)
  at android.content.Intent.writeToParcel(Intent.java:7353)
  at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2222)
  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1436)
  at android.app.Activity.startActivityForResult(Activity.java:3464)
  at android.app.Activity.startActivityForResult(Activity.java:3425)
  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:842)
  at android.app.Activity.startActivity(Activity.java:3661)
  at android.app.Activity.startActivity(Activity.java:3629)
  at giusso.simone.indirizzamentoipsubnettingrete.IPActivity.onClick(IPActivity.java:122)
  at android.view.View.performClick(View.java:4475)
  at android.view.View$PerformClick.run(View.java:18786)
  at android.os.Handler.handleCallback(Handler.java:730)
  at android.os.Handler.dispatchMessage(Handler.java:92)
  at android.os.Looper.loop(Looper.java:176)
  at android.app.ActivityThread.main(ActivityThread.java:5419)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:525)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
  at dalvik.system.NativeStart.main(Native Method)

我读了很多问题,其中问题是通过用于 class 的可序列化接口解决的,它被传递给新的 activity 但在这种情况下我不知道不知道解决这个问题的方法。

感谢您的帮助!

您不能在活动之间传递视图,例如 ViewGroup

如果这些活动紧密结合,请使用片段或其他技术将它们组合成一个 activity。