包裹:无法编组值 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。
我想在 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。