如何知道被点击的按钮 id 是啥 - android
Posted
技术标签:
【中文标题】如何知道被点击的按钮 id 是啥 - android【英文标题】:How to know what is the button id that was clicked - android如何知道被点击的按钮 id 是什么 - android 【发布时间】:2012-12-23 08:12:11 【问题描述】:我在我的应用程序中创建了 3 个按钮,点击后会转到 giveClue 方法。
<ImageButton
android:id="@+id/imageButton1"
android:layout_
android:layout_
android:layout_alignTop="@+id/lifeButtonsLbl"
android:layout_toLeftOf="@+id/ImageButton2"
android:src="@drawable/icon"
android:onClick="giveClue" />
<ImageButton
android:id="@+id/ImageButton2"
android:layout_
android:layout_
android:layout_alignTop="@+id/imageButton1"
android:layout_toLeftOf="@+id/ImageButton3"
android:src="@drawable/icon"
android:onClick="giveClue"/>
<ImageButton
android:id="@+id/ImageButton3"
android:layout_
android:layout_
android:layout_alignRight="@+id/frameLayout1"
android:layout_alignTop="@+id/ImageButton2"
android:src="@drawable/icon"
android:onClick="giveClue" />
注意:我不想使用不同的方法
活动课:
public void giveClue(View view)
gameAdapter.giveClue(game);
我的问题是我想禁用被点击的按钮。我不想为每个按钮使用不同的方法。是否可以确定单击了哪个按钮,以便我可以禁用它。
谢谢。
【问题讨论】:
【参考方案1】:实现如下一种方法,获取布局子对象的id
public static void ButtonBar(final Activity a)
//if linear instantiate LinearLayout, if RelativeLayout instantiate RelaytiveLayout
final LinearLayout ll = (LinearLayout) a.findViewById(R.id.your_layout_id);
for (int i = ll.getChildCount() - 1; i >= 0; i--)
View v = ll.getChildAt(i);
v.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
switch (v.getId())
case R.id.ImageButton1:
//disable here
break;
case R.id.ImageButton2:
//disable here
break;
case R.id.ImageButton3:
//disable here
break;
);
在 giveClue 方法中只需调用上述方法..
public void giveClue(View view)
ButtonBar(this);
// gameAdapter.giveClue(game);
我认为这可能有效..
【讨论】:
【参考方案2】:让你的班级实现 `View.OnClickListener',比如
public class MyActivity extends Activity implements View.OnClickListener
Button button1, button2, button3;
@Override
public void onCreate(Bundle bundle)
super.onCreate();
...
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
@Override
public void onClick(View v)
switch(v.getId())
case R.id.button1:
// do stuff;
break;
case R.id.button2:
// do stuff;
break;
...
【讨论】:
【参考方案3】:来自:Android OnClickListener - identify a button
您将学会做这件事的简单方法是:
public class Mtest extends Activity
Button b1;
Button b2;
public void onCreate(Bundle savedInstanceState)
...
b1 = (Button) findViewById(R.id.b1);
b2 = (Button) findViewById(R.id.b2);
b1.setOnClickListener(myhandler1);
b2.setOnClickListener(myhandler2);
...
View.OnClickListener myhandler1 = new View.OnClickListener()
public void onClick(View v)
// it was the 1st button
View.OnClickListener myhandler2 = new View.OnClickListener()
public void onClick(View v)
// it was the 2nd button
或者,如果您只使用一个 clicklistener,您可以这样做:
View.OnClickListener myOnlyhandler = new View.OnClickListener()
public void onClick(View v)
if( b1.getId() == ((Button)v).getId() )
// it was the first button
else if( b2.getId() == ((Button)v).getId() )
// it was the second button
不过,我不建议这样做,因为您必须为您使用的每个按钮添加一个if
。这很难维护。
【讨论】:
【参考方案4】:由于您作为onClick 的参数获得的view
代表被点击的视图,您只需调用setEnabled(false)
即可禁用该按钮。
public void giveClue(View view)
((Button)view).setEnabled(false); // disable button
【讨论】:
【参考方案5】:像这样..
public void giveClue(View view)
if( b1.getId() == view.getId() )
// it was the first button
else if( b2.getId() == view.getId() )
// it was the second button
【讨论】:
是否需要将视图投射到 Button?【参考方案6】:在XML中有一个Tag的属性
android:tag=""
您可以为所有三个按钮添加标签,并使用该标签相应地处理它们
【讨论】:
【参考方案7】:在giveClue
方法中检查view.getId()
并将其与R.id.imageButton1 等进行比较。通常使用switch-case 完成:)
【讨论】:
以上是关于如何知道被点击的按钮 id 是啥 - android的主要内容,如果未能解决你的问题,请参考以下文章