同样的方法重复多次

时间:2017-04-04 06:51:29

标签: java

我开始使用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);
        }


    });

4 个答案:

答案 0 :(得分:2)

click方法为您提供了一个View参数,该参数是单击的View(按钮,在您的情况下)。

所以我建议您只需创建一次OnClickListener并多次分配: 这里的关键是vButton的演员。所以它适用于所有按钮。

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

编辑: 现在我已经看到你的代码了,我的意思更清楚了。 解决方案:

  1. 让您的类实现View.OnClickListener并将View作为参数
  2. 传递
  3. 将方法解压缩到另一个方法,并从每个匿名处理程序(前lambda变体3)中调用此方法。
  4. 如果您的开发版本支持lambdas,则传递lamda函数,这是2的更清晰变体。

答案 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来检查单击了哪个按钮。