【发布时间】:2016-02-01 12:34:54
【问题描述】:
关于管理片段的快速问题。 现在我正在使用这个结构:
我有一个 MainActivity 和多个片段,即LoginFragment、InventoryFragment、NetworkFragment 等。我正在使用FragmentManager 进行交易,到目前为止效果很好。
但我遇到了一个问题。它是关于处理从 Fragments 到 Activity 的回调。
我正在使用接口回调的简单方法,我在 Fragment 中定义并在 MainActivity 中实现,但是随着我得到越来越多的 Fragment,接口变得非常拥挤。
它看起来像这样
public class MainActivity extends AppCompatActivity implements LoginFragmentCallback, InventoryFragmentCallback, NetworkFragmentCallback, AnyFragmentCallback
所以我的问题是如何更好地管理 Fragment 和 Activity 之间的通信?
感谢您的帮助!
编辑 1:我知道如何通过用户 @Rohit5k2 的评论来解决这个问题
在我的 MainActivity 中我创建了一个公共方法
public class MainActivity extends AppCompat{
public callMe();
}
在我的 Fragment 中,我可以通过
调用此方法public class AnyFragment extends Fragment{
private void someMethod(){
((MainActivity)getActivity()).callMe();
}
似乎解决了我认为的问题。还是不好?有了这个,我不需要实现任何回调,因为我有对带有 Fragments 的 MainActivity 的引用。
【问题讨论】:
-
我认为这是您的最佳选择。这比在活动中保留对片段的引用要好。
-
为什么不只在片段中实现接口呢?只实施需要的。
-
使用本地广播。所有片段都应该向主要活动广播事件。主要活动可以在接收到事件后更新 UI 或决定下一步要执行什么操作。 *.com/questions/8802157/…
-
嗯,我想这是一个有很多可能答案的问题。我倾向于让我的活动尽可能的精简,而是嵌套相关的片段。使用回调或 setTargetFrament 与父片段交谈
-
关于您的编辑,我建议您在片段的 onAttatch 方法中确保活动是 instanceof MainActivity。或者更好的是,让活动实现一个回调接口并以相同的方式进行检查。这样您就可以在以后添加其他活动,同时仍然可以重用您的片段