2017-02-24 102 views
0

我想要启动一个其他Activity并通过类型ViewGroup从一个字段中发送一个对象。如何将可序列化类发送到其他所有字段的活动?

这里的类:

public class SerializableObject implements Serializable { 
    public ViewGroup parent; 

    public SerializableObject(ViewGroup parent){ 
     this.parent = parent; 
    } 

    public ViewGroup getParent(){ 
     return this.parent; 
    } 
} 

这里召唤:

 Intent i = new Intent(thisContext,CordovaViewer.class); 
     i.putExtra("KEY",obj); 

     cordova.getActivity().startActivity(i); 

我得到的错误:

Parcelable遇到IOException异常写序列化对象

+0

http://stackoverflow.com/questions/23142893/parcelable-encountered- ioexception-writing-serializable-object-getactivity –

+1

ViewGroup不可序列化。 – ditn

+0

有我另一种方法发送布局作为frameayout到其他活动,并取代那里framelyout? – Tarasov

回答

2

无法发送交流之间的意见tivities。每个视图都附加到自己的活动(其上下文)。如果您尝试在一个使用不同的活动创建的活动中使用View,则会冒内存泄漏和崩溃的风险。

只需发送您需要在接收活动中重新创建对象的数据。

你可以用一个简单的Serializable类来做到这一点,该类只包含必要的数据,或者只需要为需要传递的每条数据设置一个Extra。

+0

部分同意!如果视图是独立组件(不直接附加到活动),那么它可以在活动之间移动。 – dhams

+0

视图需要传递上下文才能调用构造函数,因此应该不会有未附加到活动的视图。你可以使用应用程序上下文,但这需要一个非常具体的用例。 – Kuffs

+0

http://stackoverflow.com/questions/14079719/pass-application-context-to-the-view-instead-of-activity-context – Kuffs

0

您的班级必须实施Serializable

intent.putExtra("MyClass", obj); 

// To retrieve object in second Activity 
getIntent().getSerializableExtra("MyClass"); 

希望这会有所帮助。

0

尝试通过使用Bundle.Serializable的序列化的列表:

Bundle bundle = new Bundle(); 
bundle.putSerializable("value", obj); 
intent.putExtras(bundle); 

而在其他Activity得到它为:

Intent intent = this.getIntent(); 
Bundle bundle = intent.getExtras(); 
Object obj = bundle.getSerializable("value"); 
+0

cordovaViewer是一个FragmentActivity – Tarasov

+0

是的,可以任何对象..改变它反正 – dhams

相关问题