我在我的应用程序中创建了3个按钮,单击它们将转到方法giveClue。
<ImageButton
android:id="@+id/imageButton1"
android:layout_width="24dp"
android:layout_height="22dp"
android:layout_alignTop="@+id/lifeButtonsLbl"
android:layout_toLeftOf="@+id/ImageButton2"
android:src="@drawable/icon"
android:onClick="giveClue" />
<ImageButton
android:id="@+id/ImageButton2"
android:layout_width="24dp"
android:layout_height="22dp"
android:layout_alignTop="@+id/imageButton1"
android:layout_toLeftOf="@+id/ImageButton3"
android:src="@drawable/icon"
android:onClick="giveClue"/>
<ImageButton
android:id="@+id/ImageButton3"
android:layout_width="24dp"
android:layout_height="22dp"
android:layout_alignRight="@+id/frameLayout1"
android:layout_alignTop="@+id/ImageButton2"
android:src="@drawable/icon"
android:onClick="giveClue" />
注意:我不想为
使用不同的方法ACTIVITY CLASS:
public void giveClue(View view) {
gameAdapter.giveClue(game);
}
我的问题是我要禁用单击的按钮。我不想为每个按钮使用不同的方法。是否可以确定单击了哪个按钮,以便我可以禁用它。
谢谢。
答案 0 :(得分:3)
检查view.getId()
方法中的giveClue
并将其与R.id.imageButton1等进行比较。通常使用switch-case完成:)
答案 1 :(得分:1)
由于您作为[{3}}参数获得的view
表示已点击的视图,因此您只需调用setEnabled(false)
即可禁用该按钮。
public void giveClue(View view) {
((Button)view).setEnabled(false); // disable button
}
答案 2 :(得分:0)
在XML中有一个Tag
的属性android:tag=""
您可以对所有三个按钮进行标记,并使用该标记相应地处理它们
答案 3 :(得分:0)
喜欢那个..
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
}
}
答案 4 :(得分:0)
来自: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
。这很难维持。
答案 5 :(得分:0)
让你的类实现`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;
...
}
}
答案 6 :(得分:0)
实现如下一个方法,获取布局的子对象的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);
}
我认为这可行..