1

我有很多图像按钮。用户可以按下任何这些按钮,我需要知道按下了哪个按钮。这些按钮是动态显示的,所以我不知道它们会有多少。对于一个图像按钮,我会写这个监听器:

ImageButton ib = new ImageButton(this);
    ib.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(TravelBite.this, "test", Toast.LENGTH_SHORT).show();
        }
    });

但是如何为我的所有图像按钮做一个监听器?我能认出它的标签按下了哪个按钮吗?像标签将是来自 sqlite 的 ID。

我也用这个代码把图像放到按钮上:

button.setImageDrawable( testPic ); 

button是 ImageButton 并且testPict是可绘制的(图像)

但是当我按下这个按钮时,如果我这样做,它不会显示它被按下:

button.setBackgroundColor(R.color.transparent_background);

我必须这样做,因为我只想看到我可以按下的按钮图像并识别我按下的内容。

谢谢。

4

4 回答 4

1
    ok what you can do is that you can write a single callback function and then set it to each and every button it will allow you to handle each button with a sing function like :

    View.OnClickListener btn_listener = View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        // Do whatever work you want.
                        int id = v.getid();
                        // check for id and do you task.
                    }

Arraylist<Button> btn_group = new Arraylist<Button>;
or
Arraylist<int> btn_id_group = new ArrayList<int>;

    for (int i =0; i < 10; i++) {
        Button btn = new Button(getApplicationContext());
        btn.setId(i);
        btn_id_group.add(i) or btn_group.add(btn);
        btn.SetOnClickListener(btn_listener);
    }

I think it will work for you.
于 2012-05-03T13:54:43.317 回答
0

您必须手动分配 ID 以将它们分开 - 我必须做类似的事情(1000 也是我选择添加的基本 ID)

尽管侦听器中的 View v 指的是按下的按钮,但是当您以编程方式创建按钮时,id 不是唯一的并给我带来了问题,所以这就是我专门设置它们的原因

View.OnClickListener btn_listener = View.OnClickListener() 
{
      @Override
      public void onClick(View v) 
      {
            //you can use v.getID() here
      }
}

for (int i =0; i < 10; i++) 
{
    Button btn = new Button(getApplicationContext());
    btn.setID( 1000 + i );
    btn.SetOnClickListener(btn_listener);
}
于 2012-05-03T14:02:15.597 回答
0

您可以使用View.setTag(object) 和 View.getTag() 并将 sqlite id 存储在其中。像这样的东西:

View.OnClickListener listener = View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(TravelBite.this, (String)v.getTag(), Toast.LENGTH_SHORT).show();
                //or some function that do somthing useful
                //if( ((String)v.getTag).equals("image1") ){} or anything else
            }

在 for 循环中:

String tagFromSqlite = "image1";
ImageButton ib = new ImageButton(this);
ImageButton.setTag(tagFromSqlite);
ib.setOnClickListener(listener);
于 2012-05-03T14:02:19.303 回答
0
final OnClickLisener listener = new OnClickListener() {
     public void onClick(View v){
         switch((Integer)v.getTag()){ 
         case R.id.zero:
            break;
         case R.id.one:
            break;
         case R.id.two:
            break;
         }
     }
}

//when init the Buttom
ImageButton btn = new ImageButton(Context);
btn.setTag(NUMBER);
于 2012-05-03T13:40:07.833 回答