Java 同样的方法重复多次

Java 同样的方法重复多次,java,Java,我开始使用Android Studio,我正在做一个基础项目。 在这个项目中有9个按钮,我用setOnClickListener方法控制它们。 我必须重复这个方法9次,有没有其他方法来控制它们 编辑: 这就是我到目前为止所做的: b1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if (b1.getText().toString().equa

我开始使用Android Studio,我正在做一个基础项目。 在这个项目中有9个按钮,我用setOnClickListener方法控制它们。 我必须重复这个方法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);
        }


    });

将类型为
View
的参数添加到事件处理程序的方法中。调用时,此参数将表示单击的视图。然后,您可以使用它的标识或内容来确定它是哪个按钮,并使用数据

有关Android文档的
View.OnClickListener

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

  • 让您的类实现View.OnClickListener,并将此作为参数传递
  • 将该方法提取到另一个方法中,并从每个匿名处理程序(3的前lambda变量)调用该方法
  • 如果您的开发版本支持lambdas,请传递lamda函数,它是2的更干净的变体

  • 将类型为
    View
    的参数添加到事件处理程序的方法中。调用时,此参数将表示单击的视图。然后,您可以使用它的标识或内容来确定它是哪个按钮,并使用数据

    有关Android文档的
    View.OnClickListener

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

  • 让您的类实现View.OnClickListener,并将此作为参数传递
  • 将该方法提取到另一个方法中,并从每个匿名处理程序(3的前lambda变量)调用该方法
  • 如果您的开发版本支持lambdas,请传递lamda函数,它是2的更干净的变体

  • 创建一个公共视图。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并将按钮作为参数的方法。最好有多个方法,而不是有条件检查在一个方法中单击了哪个按钮。