以编程方式放置的ImageButton如何进行唯一标识

3

我一直在以编程方式将多个ImageButton放置在TableLayout中,每个ImageButton都有自己的Drawable资源作为背景。 我使用XML描述ImageButton本身的布局,然后使用LayoutInflater检索这样的ImageButton(称为genre_cell.xml):

<?xml version="1.0" encoding="utf-8"?>
<ImageButton
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/genreCellItemId" android:layout_weight="1"
android:layout_width="wrap_content" android:layout_height="wrap_content" 
android:layout_gravity="center_horizontal"
android:paddingLeft="5dip" android:paddingRight="5dip">
</ImageButton>

在我的课堂上,我做到:

myButton = (ImageButton) inflater.inflate(R.layout.genre_cell, row, false);

我已经在每个ImageButton上附加了一个onClickListener,但现在我想唯一地识别哪个ImageButton被点击了... 我想也许我可以以某种方式检索用于背景的Drawable的ID,并将其与可用的Drawable的int值进行比较? 这是一个选项,如果可以,应该如何实现? 还有其他选项吗?


1
如果你的答案确实解决了问题,那么你应该接受自己的答案。这样可以让其他人知道问题已经解决,特别是对于那些寻找解决方案的人来说非常有用。 - Steve Haley
我很想这样做,Steve,但是我必须等待2天才能接受自己的答案,至少当我尝试时弹出窗口是这样告诉我的... - TiGer
2个回答

1

可以的!

在你的res/values文件夹中,创建一个名为button_ids.xml的xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <item type="id" name="image_button_one" />
  <item type="id" name="image_button_two" />
  ...
</resources>

在你的inflate调用之后:

myButton = (ImageButton) inflater.inflate(R.layout.genre_cell, row, false);
myButton.setId(R.id.image_button_one);
...

我实际上还没有尝试过,但我认为这就是你应该做的方式。


嗯,这意味着我应该对我拥有的每个按钮进行特定的跟踪,并已经给它们分配了一个ID? 此外,按钮的数量没有给出,可能在0到80左右...我不会制作一个包含80个项目的资源文件:P 您应该想象setId在80个项目的循环中的某个位置,因此R.id.image_button_one应动态更改为image_button-two等,直到button_eighty... - TiGer
啊,那么这可能没有太多意义。如果只有一把,那么这就是正确的方法。 - mxk

1

我刚好偶然发现了一个博客,提到了ImageButton的setTag()和getTag()方法,我可以使用它们,所以我的问题得到了解答... 博客链接: http://jongladwin.blogspot.com/2010/03/androidsettag-and-gettag-usage-for.html

在查找一些资料后,我甚至看到了setId()方法和getId()方法,因此看起来有几种方法可以识别这样的ImageButton... 很好知道:P


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接