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