如何检查按下了哪个图像按钮?

时间:2012-05-03 13:35:24

标签: android

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

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);

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

感谢。

4 个答案:

答案 0 :(得分: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.

答案 1 :(得分: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);

答案 2 :(得分: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);
}

答案 3 :(得分:0)

你可以use 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);