我开始使用Android Studio,而我正在做一个基本项目。 在这个项目中,我使用方法setOnClickListener控制了9个按钮。 我必须重复这个方法9次,还有另一种方法来控制它们吗?
修改 这就是我到目前为止所做的:
b1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (b1.getText().toString().equals(""))
if (turno == 1) {
turno = 2;
b1.setText("X");
} else if (turno == 2) {
turno = 1;
b1.setText("O");
}
n_turni++;
vincitore();
b1.setEnabled(false);
}
});
b2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (b2.getText().toString().equals(""))
if (turno == 1) {
turno = 2;
b2.setText("X");
} else if (turno == 2) {
turno = 1;
b2.setText("O");
}
n_turni++;
vincitore();
b2.setEnabled(false);
}
});
b3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (b3.getText().toString().equals(""))
if (turno == 1) {
turno = 2;
b3.setText("X");
} else if (turno == 2) {
turno = 1;
b3.setText("O");
}
n_turni++;
vincitore();
b3.setEnabled(false);
}
});
答案 0 :(得分:2)
click方法为您提供了一个View
参数,该参数是单击的View(按钮,在您的情况下)。
所以我建议您只需创建一次OnClickListener
并多次分配:
这里的关键是v
到Button
的演员。所以它适用于所有按钮。
View.OnClickListener listener = new View.OnClickListener() {
public void onClick(View v) {
Button b = (Button)v;
if (b.getText().toString().equals(""))
if (turno == 1) {
turno = 2;
b.setText("X");
} else if (turno == 2) {
turno = 1;
b.setText("O");
}
n_turni++;
vincitore();
b.setEnabled(false);
}
});
b1.setOnClickListener(listener);
b2.setOnClickListener(listener);
b3.setOnClickListener(listener);
b4.setOnClickListener(listener);
b5.setOnClickListener(listener);
b6.setOnClickListener(listener);
b7.setOnClickListener(listener);
b8.setOnClickListener(listener);
b9.setOnClickListener(listener);
答案 1 :(得分:0)
将类型
的参数添加到事件处理程序的方法中。调用时,此参数将表示单击的视图。然后,您可以使用其标识或内容来确定它是哪个按钮并使用数据。 function myFunction() {
var names = "(Ajar,Sentinel,Manor,),(Dagwood,Steve,Guru,),(a,b,c,),(p,q,r,),(dfg,)";
var res = names.replace(/\,\)/g,')');
document.getElementById("demo").innerHTML = res;
}
有关function myFunction() {
var names = "(Ajar,Sentinel,Manor,),(Dagwood,Steve,Guru,),(a,b,c,),(p,q,r,),(dfg,)";
var res = names.replace(/\,\)/g,')');
document.getElementById("demo").innerHTML = res;
}
Android文档的文档,请参阅:
https://developer.android.com/reference/android/view/View.OnClickListener.html
编辑: 现在我已经看到你的代码了,我的意思更清楚了。 解决方案:
View
作为参数答案 2 :(得分:0)
将一个常见的View.OnClickListener创建为
private View.OnClickListener buttonClickListener = new View.OnClickListener() {
public void onClick(View v) {
if (v.getId() = button1.getId()){// do button1 click function}
if (v.getId() = button2.getId()){// do button2 click function}
}
};
button1.setOnClickListener(buttonClickListener);
button2.setOnClickListener(buttonClickListener);
通过setOnClickListener(buttonClickListener)将buttonClickListener分配给所有按钮。要识别你内部的每个按钮onClick(View v)方法将v.getId()与你的button.getId()进行比较。
您可以通过将View.OnClickListener实现到您的类来执行相同操作,这将要求您覆盖onClick方法。因此,在setOnClickListener中,只需将this
作为OnClickListener引用传递。
答案 3 :(得分:0)
在XML
中 <Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextButton"
/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextButton2"
/>
在Java文件中
Button b = (Button) findViewById(R.id.button1);
Button b2 = (Button) findViewById(R.id.button2);
b.setOnClickListener(this);
b2.setOnClickListener(this);
@Override
public void onClick(View v) {
int id = v.getId();
switch(id) {
case R.id.button1:
// execeute our code
break;
case R.id.button2:
// execeute our code
break;
}
}
无论你在布局中放了多少个按钮,但是你需要为每个按钮注册一次点击监听器
根据android体系结构,您可以覆盖单个函数.ie onClick(),每次单击按钮时都会调用它。您可以通过匹配视图ID来检查单击了哪个按钮。