我对Android中的"正确编程"有疑问.
我目前正在使用片段开发应用程序.它涉及动态添加的片段到Activity,从XML膨胀的片段,从XML嵌套的片段或动态添加.让我们说一点,一切.
这个问题关注的概念是与片段有关的沟通过程.所以,我已经阅读了文档,这不是我第一次尝试使用片段.
常识(和文档)告诉我们,如果Fragment想要说话或与其活动进行交流,我们应该使用一个界面.
例:
TestFragment
public class TestFragment extends Fragment {
private TestFragmentInterface listener;
public interface TestFragmentInterface {
void actionMethod();
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
if (getActivity() instanceof TestFragmentInterface) {
listener = (TestFragmentInterface) getActivity();
}
// sending the event
if (listener != null) listener.actionMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
测试活动
public class Test implements TestFragmentInterface {
@Override
public void actionMethod() {
..
}
}
Run Code Online (Sandbox Code Playgroud)
这里一切都很好.
这提高了可重用性,因为我的TestFragment可以与任何类型的Activity交互,因为Activity实现了我声明的接口.
反过来说,Activity可以通过保持引用并调用其公共方法来与片段交互.这也是使用Activity作为桥接器进行片段到片段通信的建议方法.
这很酷,但有时感觉就像使用接口这只是有点"太多".
问题A.
在这个场景中,我附加的片段具有非常集中的角色,这意味着它们是针对该特定活动完成的,否则不会被使用,忽略接口实现在概念上是错误的,只是做了类似的事情.
((TestActivity) getActivity().myCustomMethod();
Run Code Online (Sandbox Code Playgroud)
?
这也适用于这样的场景(不是我的情况,只是把它当作"最坏的")我的活动必须处理各种各样的这些不同的片段,这意味着它应该为它应该处理的每个片段实现一个方法.这使代码陷入了一堆"可能不需要的线".
继续前进:仍然使用"聚焦"片段,旨在仅在某种方式下工作,使用嵌套片段是什么?
添加它们就像
public class …Run Code Online (Sandbox Code Playgroud)