Java 同样的方法重复多次
我开始使用Android Studio,我正在做一个基础项目。 在这个项目中有9个按钮,我用setOnClickListener方法控制它们。 我必须重复这个方法9次,有没有其他方法来控制它们 编辑: 这就是我到目前为止所做的:Java 同样的方法重复多次,java,Java,我开始使用Android Studio,我正在做一个基础项目。 在这个项目中有9个按钮,我用setOnClickListener方法控制它们。 我必须重复这个方法9次,有没有其他方法来控制它们 编辑: 这就是我到目前为止所做的: b1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if (b1.getText().toString().equa
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);
}
});
将类型为
View
的参数添加到事件处理程序的方法中。调用时,此参数将表示单击的视图。然后,您可以使用它的标识或内容来确定它是哪个按钮,并使用数据
有关Android文档的View.OnClickListener
编辑:
现在我看到了你的代码,你的意思对我来说更清楚了。
解决方案:
将类型为
View
的参数添加到事件处理程序的方法中。调用时,此参数将表示单击的视图。然后,您可以使用它的标识或内容来确定它是哪个按钮,并使用数据
有关Android文档的View.OnClickListener
编辑:
现在我看到了你的代码,你的意思对我来说更清楚了。
解决方案:
创建一个公共视图。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(ButtonClicklListener)为所有按钮分配ButtonClicklListener。要识别onClick(View v)方法中的每个按钮,请将v.getId()与button.getId()进行比较
通过在类中实现View.OnClickListener,您可以执行相同的操作,这将要求您重写onClick方法。因此,在您的setOnClickListener中,只需将此作为OnClickListener引用传递。创建一个公共视图。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(ButtonClicklListener)为所有按钮分配ButtonClicklListener。要识别onClick(View v)方法中的每个按钮,请将v.getId()与button.getId()进行比较
通过在类中实现View.OnClickListener,您可以执行相同的操作,这将要求您重写onClick方法。因此,在setOnClickListener中,只需将
此
作为OnClickListener引用传递。单击方法已经为您提供了一个视图
参数,即已单击的视图(在您的情况下为按钮)
因此,我建议您只需创建一次OnClickListener
,然后多次分配它:
这里的关键是将v
转换为按钮
。所以它适用于所有按钮
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);
click方法已经为您提供了一个
视图
参数,该参数是已单击的视图(在您的示例中是按钮)
因此,我建议您只需创建一次OnClickListener
,然后多次分配它:
这里的关键是将v
转换为按钮
。所以它适用于所有按钮
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);
在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"
/>
无论在布局中放置了多少个按钮,但必须为click listener注册每个按钮一次
根据android架构,您可以覆盖单个函数。ie onClick(),每次单击按钮时都会调用该函数。您可以通过匹配XML中的视图ID来检查单击了哪个按钮。
<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"
/>
无论在布局中放置了多少个按钮,但必须为click listener注册每个按钮一次
根据android架构,您可以覆盖单个函数。ie onClick(),每次单击按钮时都会调用该函数。您可以通过匹配视图ID来检查单击了哪个按钮。向我们展示您迄今为止所做的工作。这与android Studio完全无关。您用来开发的IDE是不相关的。你问的是程序中的问题,而不是IDE中的问题。我根据你的建议编辑了这篇文章,谢谢。在我看来,唯一的区别在于你在OnClickListener中操作的按钮。因此,避免代码重复的一种可能性是创建一个返回OnClickListener并将按钮作为参数的方法。最好有多个方法,而不是有条件检查在一个方法中单击了哪个按钮。向我们展示您迄今为止所做的工作。这与Android Studio无关。您用来开发的IDE是不相关的。你问的是程序中的问题,而不是IDE中的问题。我根据你的建议编辑了这篇文章,谢谢。在我看来,唯一的区别在于你在OnClickListener中操作的按钮。因此,避免代码重复的一种可能性是创建一个返回OnClickListener并将按钮作为参数的方法。最好有多个方法,而不是有条件检查在一个方法中单击了哪个按钮。