我试图创建一个基本上包含我在构建布局时通常使用的许多方法和操作的UI库。这种功能的一个例子是管理fab点击。我在主要活动中有一个fab,我根据加载的片段更改其功能,图标和可见性。我现在正在使用接口执行所有操作,因为您可以看到here。一切正常,但唯一的问题是我必须确保其他用户使用扩展我的界面的活动和片段。
实施例
protected void hideFab() {
capsuleActivity().getFab().hide();
}
protected CActivityCore capsuleActivity() {
if (!(getActivity() instanceof CActivityCore)) {
throw new RuntimeException(s(R.string.capsule_activity_context_error));
}
return ((CActivityCore) getActivity());
}
如果他们不需要一个片段的函数,他们必须覆盖我的许多方法,使它不做任何事情。我的另一个选择可能是使用EventBus,并在调用某些内容时发送各种事件并相应地解决它。这样,用户是否使用我的课程就不再重要了;如果他们只想要几个片段中的函数,他们可以只为这些片段扩展我的片段,而不用担心其余片段。
我的问题是,这是一种不错且可行的做事方式,还是对于应该如何使用EventBuse这样做是否过分?
我考虑的另一个功能是让活动向当前片段发送回调,并且仅在片段扩展某个类时才运行。
目前的实施:
@SuppressWarnings("unchecked")
protected <T extends Fragment & CFragmentCore> void onCurrentFragment(Class<T> clazz, @NonNull Current<T> callback) {
Fragment current = getSupportFragmentManager().findFragmentById(getFragmentId());
if (clazz.isInstance(current.getClass())) {
callback.onMatch((T) current);
}
}
但我也可以使用带有包含类和回调函数的事件的EventBus。
答案 0 :(得分:0)
使用EventBus是一种设计选择。它有优点和缺点,您可以在Google上轻松找到它。
没有&#34;矫枉过正&#34;如果你能够简化你的代码。
除此之外,EventBus在您的场景中可能是一个好主意,因为它提供了一种管理视图 - 控制器通信的简便方法。