我有很多图像按钮。用户可以按下任何一个按钮,我需要知道按下了哪个按钮。这些按钮动态显示,所以我不知道它们有多少。 对于一个图像按钮,我会写这个听众:
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图像,我可以按下并识别我按下的内容。
感谢。
答案 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);