4

安卓 2.3.3。

我有一个关于在 Android 中命名 ID 的问题。

假设我在 Activity1 中有两个按钮(保存和取消)。我将它们(ID)命名为 btnSave 和 btnCancel。现在我有了 Activity2,其中还有保存和取消按钮。两者都具有相同的功能。如果我将 ID 指定为 btnSave 和 btnCancel 会发生什么。

我在编译时会遇到问题吗?当我按下时,R.id。和 ctrl+space,我会有两个 btnSave 和 btnCancel(s) 可供选择吗?

最重要的是,如果我应该给它们起不同的名字,我为什么要给它们起不同的名字?

4

4 回答 4

6

如果它只是用简单的方式编写代码,那么

您可以尝试类似的方法(使用带有前缀或后缀的活动或布局 xml 文件编写按钮名称)

button_save_<activity_or_layout_name>
button_cancel_<activity_or_layout_name>

但在运行时,您的按钮 ID 始终由布局视图引用。您将其设置为 Activity 的setContentView().

更新:

假设在 Activity2 中您使用的是 Activity1 布局的 id 按钮,那么您可以获得NullPointerException,因为当前 Activity2 中没有引用您的按钮。(因为你的 Activity2 有不同的布局)。

于 2013-02-16T11:29:42.277 回答
4

在我看来,当你命名 ID 时,你应该先写下将使用它们的活动的名称,然后是小部件的首字母,最后是它的功能,例如 loginBSave、loginBCancel、activity2BSave、activity2BCancel 无论如何这完全取决于你程序员以一种可以区分它们的方式命名它们

例如:

<activity_or_layout_name>_button_save
<activity_or_layout_name>_button_cancel
于 2013-02-16T11:30:03.167 回答
1

在多个活动之间共享相同的 ID 没有任何影响,事实上,您甚至可以在同一个活动中多次使用相同的 ID,而不会出现任何问题。在这种情况下,对 getViewById() 的调用将简单地返回当同一层次结构中有许多具有相同 ID 的视图时它将找到的第一个视图。

This kind of situation usually happens when the same layout need to be inflated multiple times from its XML file. If you need to find all the View sharing the same ID, you have to change the ID of each View with a setId() one after the other after each find or give a different starting point.

于 2013-02-16T13:17:18.327 回答
0

对于布局特定的元素,我使用带有布局名称首字母的前缀。因此,如果我有名为的布局show_task_layout.xml,它的元素将具有名称stl_button_ok等。

对于可能复制或出现在许多活动中的特定元素,我更喜欢使用一个不带前缀的名称。但是如果在每个布局中都遵循这种方式,那么调试会很头疼如果你什么时候不会通过 id 找到元素

于 2013-02-16T11:49:42.447 回答