【问题标题】:Fragments onClick method in fragment element片段元素中的片段 onClick 方法
【发布时间】:2011-12-20 15:07:20
【问题描述】:

我读了很多关于片段的文章,但我仍然对如何做感到困惑。

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

android:onClick="buttonClicked"

现在我想实现那个方法

public void buttonClicked(View view)  

我会假设这必须在 FragmentA.java 而不是 MainActivity.java 中实现。但它只有在 MainActivity.java 中实现了该方法时才有效。这是为什么?对我来说这没有意义。 Pre Honeycomb 属于一个活动的方法留在该活动中,现在在平板电脑上我将许多活动合并到一个 MainActivity 并且所有不同的方法都合并了?那么你在 FragmentA.java 中放了什么?如果您必须启动自己的活动,因为该应用程序在手持设备上运行,那么 onClick 方法不必在 MainActivity 中,而是在需要调用的 Activity 中。我现在很迷茫……

【问题讨论】:

  • 可能是因为片段布局 xml 使用主要活动上下文进行了膨胀。让我们看看其他人会如何回答。
  • 你的意思是“只有在MainActivity.java中实现该方法才有效”。您是否收到错误,或者您的代码根本没有给您预期的结果?
  • stackoverflow.com/questions/7570575/… 这里回答了同样的问题。

标签: java android android-fragments android-3.0-honeycomb


【解决方案1】:

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

来自Fragments 上的 Android 文档:

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

也就是说,你永远不应该从另一个片段中操作一个片段;相反,这应该通过底层的 Activity 来完成。阅读article 中的“为活动创建事件回调”部分了解更多信息(这很重要!!)。

另一方面,如果您希望按钮在Fragment 本身内执行操作(即,如果您希望通过Button 单击来更改片段内TextView 的文本),您应该实现这在Fragment 中,而不是Activity 中(这是因为结果行为包含在Fragment 中,与父Activity 无关)。

发表评论,我可以澄清我的帖子是否令人困惑......我最近才开始了解Fragment自己:)。

【讨论】:

  • 我可以确认,AndyAndroid 的担忧是有根据的。我对 TabHost 和多个 FragmentActivity 有同样的问题。基本上,我在布局中调用的 onClick 方法期望该方法在 TabHost 类中定义,而不是在 Fragment 中定义。因此这是个大问题。
  • 也许我没有正确阅读,这被标记为答案,但是我如何在片段中制作onClick 监听器而不以编程方式创建监听器?
【解决方案2】:

嗯,

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

检查一下。 Android developer onClick attribute description

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    相关资源
    最近更新 更多