我读了很多关于片段的文章,但我仍然对如何做什么感到困惑。
我有一个MainActivity,它并排显示两个片段。在其中一个片段中,我有一个按钮,并在片段布局XML中为按钮
定义android:onClick="buttonClicked"
现在我想实现该方法
public void buttonClicked(View view)
我原以为这必须在FragmentA.java中实现,而不是在MainActivity.java中实现。但它只有在MainActivity.java中实现该方法时才有效。这是为什么?对我来说没有意义。 Pre Honeycomb属于一项活动的方法保留在该活动中,现在在平板电脑上我将许多活动合并到一个MainActivity并且所有不同的方法合并在一起?那么你在FragmentA.java中做了什么呢?如果你必须开始自己的活动,因为这个应用程序在掌上电脑上运行,那么onClick方法不应该在MainActivity中,而是在需要调用的Activity中。我现在很困惑......
答案 0 :(得分:4)
我不确定具体问题是什么,但也许这会有所帮助。
来自Fragment
s上的Android文档:
您应该将每个片段设计为模块化和可重用的活动组件。也就是说,因为每个片段使用自己的生命周期回调定义自己的布局和自己的行为,所以可以在多个活动中包含一个片段,因此您应该设计为重用并避免直接操作另一个片段中的一个片段。
也就是说,你永远不应该操纵另一个片段中的片段;相反,这应该通过基础活动来完成。请阅读此article中的“创建活动的事件回调”部分以获取更多信息(这是重要的事情!!)。
另一方面,如果您希望按钮在Fragment
内执行操作(即如果您希望Button
点击更改TextView
内的Fragment
文本片段),您应该在Activity
而不是Fragment
中实现这一点(这是因为结果行为包含在Activity
中,与父Fragment
无关})。
发表评论我可以澄清我的帖子是否令人困惑......我最近才开始理解{{1}}我自己:)。
答案 1 :(得分:0)
那么,
我猜它与android上下文结构的层次结构有关。 Activity是所有子视图的主机,因此您可以说片段实际上正在使用其主机的上下文。这就是为什么当您使用onClick with fragment system时总是在片段的Host活动中搜索它。
检查一下。 Android developer onClick attribute description
我没有检查过一件事,但你可以进行测试。 通过在主机活动而不是片段中提供实现,但是使用片段的onClick on布局文件。它应该调用parent的方法。