Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 片段元素中的片段onClick方法_Java_Android_Android Fragments_Android 3.0 Honeycomb - Fatal编程技术网

Java 片段元素中的片段onClick方法

Java 片段元素中的片段onClick方法,java,android,android-fragments,android-3.0-honeycomb,Java,Android,Android Fragments,Android 3.0 Honeycomb,我读了不少关于碎片的文章,但我仍然不知道该怎么做 我有一个MainActivity,它并排显示两个片段。在其中一个片段中,我有一个按钮,并在该按钮的片段布局XML中定义 android:onClick="buttonClicked" 现在我想实现这个方法 public void buttonClicked(View view) 我假设这必须在FragmentA.java中实现,而不是在MainActivity.java中实现。但是,只有在MainActivity.java中实现该方法时,

我读了不少关于碎片的文章,但我仍然不知道该怎么做

我有一个MainActivity,它并排显示两个片段。在其中一个片段中,我有一个按钮,并在该按钮的片段布局XML中定义

android:onClick="buttonClicked"
现在我想实现这个方法

public void buttonClicked(View view)  

我假设这必须在FragmentA.java中实现,而不是在MainActivity.java中实现。但是,只有在MainActivity.java中实现该方法时,它才起作用。为什么呢?对我来说,这毫无意义。以前,属于某个活动的方法保留在该活动中,现在在平板电脑上,我将多个活动合并到一个主活动中,所有不同的方法都合并了?比如说,你在FragmentA.java中放了什么?如果由于此应用程序在手持设备上运行,您必须启动自己的活动,那么onClick方法不必位于main活动中,而必须位于需要调用的活动中。我现在很困惑…

我不确定具体的问题是什么,但也许这会有所帮助

Fragment
s上的Android文档中:

您应该将每个片段设计为一个模块化的、可重用的活动组件。也就是说,因为每个片段都定义了自己的布局和自己的行为以及自己的生命周期回调,所以您可以在多个活动中包含一个片段,因此您应该为重用而设计,避免直接从另一个片段操作一个片段

也就是说,您不应该操纵来自另一个片段的片段;相反,这应该通过底层活动来完成。有关更多信息,请阅读本文中的“创建活动的事件回调”部分(这很重要!!)

另一方面,如果您希望按钮在
片段
本身内执行操作(即,如果您希望
按钮
单击以更改片段内
文本视图
),则应在
片段
中执行此操作,而不是在
活动
(这是因为生成的行为包含在
片段中,与父
活动
无关)

请留下评论,我可以澄清我的帖子是否令人困惑……我只是最近才开始理解
Fragment
的我自己:)。

我猜这和android上下文结构的层次结构有关。 活动是所有子视图的宿主,因此您可以说片段实际上正在使用其宿主的上下文。这就是为什么在使用onClick with fragment时,系统总是在片段的宿主活动中搜索它

检查一下。

我没有检查过一件事,但你可以做个测试。
通过在宿主活动而不是片段中提供实现,但在片段的布局文件上使用onClick。它应该调用父方法

可能是因为片段布局xml是使用主活动上下文膨胀的。让我们看看其他人会回答什么。你是什么意思“只有在
MainActivity.java
中实现该方法时,它才有效”。您是否遇到了错误,或者您的代码没有给出预期的结果?同样的问题也在这里得到了回答。我可以证实安迪安卓德的担忧是有根据的。我对TabHost也有同样的问题&多个FragmentActivity。基本上,我在布局中调用的onClick方法期望该方法在TabHost类中定义,而不是在片段中定义。这就是一个大问题。也许我没有正确地阅读,这被标记为答案,但是我如何在片段中创建
onClick
listener,而不用通过编程创建侦听器呢?