1

画像ボタンがたくさんあります。ユーザーはこれらのボタンのいずれかを押すことができ、どのボタンが押されているかを知る必要があります。これらのボタンは動的に表示されるので、どれくらいになるかわかりません。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();
        }
    });

しかし、すべての画像ボタンに対して1つのリスナーを実行するにはどうすればよいですか?タグで押されたボタンを認識できますか?同様のタグはsqliteからのIDになります。

また、私はこのコードで画像をボタンに配置します:

button.setImageDrawable( testPic ); 

buttonImageButtonであり、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
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 に答える
0

IDを手動で割り当てて、それらを分離しておく必要があります-私は同様のことをしなければなりませんでした(1000は私が追加することを選択したベースIDでもありました)

リスナーのViewvは押されたボタンを指しますが、プログラムでボタンを作成する場合、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()を使用して、sqliteidを格納できます。このようなもの:

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 に答える