-1

在您认为这是一项民意调查之前,请完整阅读此内容,我正在寻找信息和参考资料以做出明智的决定,而不是试图确定哪个最受欢迎(@PéterVarga)

这是我在这里的第一个问题,我终于注册了,因为我已经出现了很多次,我觉得我实际上让自己变得更糟。这个问题是非常开放的,是的,因为我想要利弊。我已经尝试过拥抱 Android 以及它是如何做这些事情(XML、活动、破坏活动)的东西,通常我是一个 WxWidgets 人,所以这感觉非常不同。我读得越多,它就越有意义。但是有一个问题,这个问题,它不仅适用于按钮,而且适用于所有回调。到目前为止,Android 教程和指南似乎(大部分)更多是关于让某些东西快速运行,正如我所说,我寻求拥抱 Android,而不是为它制作另一个 tat 应用程序。

因此,正如标题所示,我为此使用了按钮,但是是的,任何回调。

第一个用例“问题”考虑 2 个片段,A 和 B,以及 2 个活动,X 和 Y。现在假设 A 包含一个列表,B 包含该列表中项目的详细信息(通用设置)如果在横向模式活动X将在肖像模式下显示两种片段A和B,如果没有选择(以及通过任何方式存储的选择(随意提及潜在/体面的方式)片段A将在选择某物时显示A a将显示​​A(或者如果选择了某些东西)片段 B 将由 Activity Y 显示。如果它处于横向模式,则 Activity Y 将调用它的“finish()”方法,我理解它开始破坏它。我可以凭经验验证这一点,但这意味着我的结论是从行为中推断出来的,而不是(尽管我可能正确推断)谷歌的实际意图。

如果我使用XML的onClick方法,B有时会得到那个回调,如果它完成了,它怎么会,它会转到A吗?我应该将逻辑添加到片段中吗?(通过内联一个新的onClickListener)我是否应该做我可能在WxWidgets中做的事情,在那里我为基本上所有的东西扩展了一个类,并有我自己的按钮类,它实现了onClickListener,因此可以有它自己的onClick方法?

如果它对我的作业有帮助,我了解到我可能不应该尝试捕获配置更改事件,我接受我的 Activies 将被关闭并重新启动,所以我可以在 onCreate 方法中检查方向,因为对于活动不会改变方向。这导致了我的最后一个问题,Bundle 是唯一的方法吗?我找到了另一个,但它已被弃用,仅用于配置更改。

谢谢,对不起,它很长,是的,相当广泛。我真的找不到任何地方对此进行辩论。(在今天的帖子中到达了 O'Reilly Android 书籍,我怀疑它们(O'Reilly 书籍)在这里很受欢迎,如果你知道的话,请给我一个页面参考,或者甚至这都叫什么。Wrox Android 4 Dev。书也到了,我有这个 PDF 格式,为了表示同意,再次购买,主题标题,这是第 4 版(或只有 4 版),所以我还没有阅读片段部分,但我怀疑这会带来很多启示)

顺便说一句,我可以在旁边看到类似的问题,当我点击这个帖子时,我一直在阅读它们,如果我这样做了,那是因为我仍然认为这是一个问题。

编辑1:(编辑是更新而不是澄清,基本上是新部分)对于阅读此内容的任何人(1在未回答的Q的第250页中,每页50个......)我会发表我的想法,所以你可以为了得到答案(如果我没有),我决定尝试这样的事情:

this.MemberOfClass = 0;
button.setOnClickListener(new View.OnClickListener() {            
    public void onClick(View v) {
        MemberOfClass++;        
        MethodOfClass();
    }
});

其中(我使用“this”来说明 MemberOfClass 的意思)MethodOfClass 不是 OnClickListener 的方法,而是发生在其中的类的方法(不确定我是喜欢还是讨厌 Java 的作用域),这创建了一种每个按钮都有多个按钮的方法片段(或活动),可以根据代码的确切位置精确控制调用哪个 MethodOfClass(活动 X 或 Y,以我自己的示例为例)。

在一个真正重视微小内存占用和在低规格系统软件上很好使用的平台上创建一个对象似乎非常浪费,但我还没有找到更好的方法,因此提出了这个问题。

编辑 2:我正在研究如何为每个按钮创建一个单独的按钮类,同时仍然保持 XML 部分整洁(使用按钮原语)

4

2 回答 2

1

看,当您使用回调方法名称指定 XML onClick 属性时,它会尝试在当前保存您的片段的上下文中找到指定的方法。在这种情况下,最好将视图描述(XML 布局)与功能逻辑分开。所以我个人喜欢为每个片段实现不同的点击监听器(无论你将它们声明为匿名类还是单独的类)。

您可以为每个按钮创建自己的类,但恐怕从面向对象的范例 POV 来看这不是一个好主意。通常创建新类的原因是泛化一些常用的实体(由多个实例组成)。在所讨论的情况下,您的按钮可能仅特定于某些操作,因此没有必要为每种操作类型创建新类。

还有一种方法可以确定哪个 Activity 调用了您的侦听器的 onClick 方法。onClick() 内部的某个地方只需调用提供的视图参数的 view.getContext() 并使用 instanceof 运算符检查它的类,如果它是 ActivityA 实例或 ActivityB 实例。

此外,可能建议您尝试遵守 Java 编码约定,不要以大写开头命名类字段和方法。它只是帮助其他人更快、更清晰地阅读和理解你的代码。

于 2013-02-25T08:27:05.087 回答
0

Anonymous Class是要走的路,因为大多数情况下你只需要one instance所以创建一个单独的类并实现 OnClickListener 是一种浪费,作为一个好习惯,我喜欢在 a 中创建这个匿名对象,method因为它更容易阅读createRequestItemPositiveListner()而不是在创建Dialog这样的方法中:

dialogBuilder.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            //do request item things...
        }
    });

我喜欢这个:

dialogBuilder.setPositiveButton("Yes", createRequestItemPositiveListener());

更易于阅读,如果您想查找在对话框的“PositiveButton”中完成的代码,则该方法比在对话框创建中某处的一段代码中更容易,如果request item things需要至少 30 个,情况会变得更糟-50 行代码,对话框的创建会变得一团糟,我建议你阅读Clean Code本书以Uncle-Bob (Robert C. Martin)获得更好的理解。

于 2013-07-22T16:31:36.533 回答