如果我在不同的布局中为几个小部件使用相同的ID,会发生什么?

时间:2010-11-11 14:56:50

标签: android layout

目前我小心翼翼地为每个小部件使用不同的ID,但如果我对不同布局xml文件中的某些小部件使用相同的id,那么我对findViewById的调用会怎样?它会混淆并从错误的布局文件中返回一个小部件吗?

我问,因为我想在其他一些视图中包含一个视图(带有一行按钮),然后每个屏幕类都必须为包含的视图中的每个按钮指定一个稍微不同的行为。但要做到这一点,他们会在相同的id上调用findViewById。 例如,目前我在每个文件中都喜欢这样:

final ImageButton homeButton = (ImageButton)this.findViewById(R.id.rshome_button);
homeButton.setOnClickListener(new BottomButtonClickListener());

final ImageButton hotButton = (ImageButton)this.findViewById(R.id.rshotlist_button);
hotButton.setOnClickListener(new BottomButtonClickListener());

final ImageButton locButton = (ImageButton)this.findViewById(R.id.rsbot_map);
locButton.setOnClickListener(new BottomButtonClickListener());

final ImageButton sendButton = (ImageButton)this.findViewById(R.id.rssend_button);
sendButton.setOnClickListener(new BottomButtonClickListener());

但是我将每个文件中的R.id更改为指向每个关联布局中的窗口小部件。如果我可以使用一个R.id,那将是很好的,所以我不必调整每个布局文件和每个屏幕类。

由于

3 个答案:

答案 0 :(得分:8)

是的,您可以在不同的布局中使用相同的id。事实上,这可能是一种很好的做法。

答案 1 :(得分:3)

只要您不在同一活动中实例化两个布局,它就应该没问题。但从未尝试过,我不想保证。

但是,如果Android代码生成器出错,我也不会感到惊讶,因为它可能会尝试在 R.java 文件中创建两个R.id.rshome_button条目。

答案 2 :(得分:-1)

您自己尝试的最佳方式。

但你做setContentView(R.layout.your_layout);

因此,如果您调用findViewById,将在your_layout中查找具有给定ID的窗口小部件

这就是为什么你可以在不同的布局中使用相同的id。