我有这样的结构:在活动和片段之间传递数据或行为
活动A有一个ViewPager。 ViewPager的页面是已知片段。
活动A有一个复杂对象的列表,我想在页面中显示。
当用户点击ViewPager活动内的项目时,必须启动B。活动B还需要具有复杂对象的列表。
所以我要通过这个列表
A - >片段(S) - “乙
首先,我发现这是不可能使用片段的构造函数将数据传递给它。我必须使用parcelable或serializable。在片段然后我必须包裹或再次序列化传递给B.
但我不想要序列或地块只有2次复杂数据的整个列表,通过让它B.
我想避免使用静态字段。
然后我想到了将监听器传递给监听项目单击的片段,并通知我的活动A,然后活动A随着数据启动活动B.这对我来说看起来最清洁,因为A实际上是数据所属的一个,所以A用数据开始片段,片段返回到A然后A用数据开始B.我不需要在任何地方传递数据(序列化!)。
但是这似乎并不奏效,因为我如何使用序列化将侦听器传递给片段?在片段中使用监听器返回活动有什么问题?
我该如何解决这个问题?
编辑
我发现一个关于对话的片段线程此解决方案:Get data back from a fragment dialog - best practices?
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnArticleSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
}
}
所以我加入这个我片段,让我的活动实现某些接口。
这将解决从片段传递数据到B的问题。但我仍然需要将列表从A传递到片段。也许我将不得不使用一个Parcelable ...
编辑:我试过Parcelable,它的工作原理。但是,例如,我列表中的对象在它们之间也有很多字段也是地图。编写Parcelable代码(写入/读取)是疼痛。也许我只是坚持静态数据...
我得到了同样的问题。我的复杂数据使用片段计算并显示在活动A的列表中,但细节将显示在任一活动B中使用片段或两个窗格布局中的同一活动中,但具有不同的详细信息片段。我完全不知道,但是可以将我的详细数据加以分类,这是一种痛苦...你有没有想出更好的想法?例如把它作为中间介质放在应用程序对象中? – Zordid