2017-04-04 41 views
0

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


    }); 
+0

向我们展示您迄今为止所做的工作。 –

+2

这确实与Android Studio无关。你用来开发的IDE是无关紧要的。您正在询问程序中的问题,而不是IDE中的问题。 – RealSkeptic

+0

我按照你的建议编辑了帖子,谢谢。 –

回答

2

点击方法为您提供了一个参数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); 
0

View类型的参数添加到事件处理程序的方法。当被调用时,这个参数将代表被点击的视图。然后,您可以使用其身份或内容来确定它是哪个按钮并使用数据。

见的View.OnClickListener的Android文档的文档: https://developer.android.com/reference/android/view/View.OnClickListener.html

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

  1. 让你的类实现View.OnClickListener并通过this作为参数
  2. 提取方法到另一个方法并称之为从每个匿名处理,3。
  3. 拉姆达预变
  4. 如果你的开发版本支持lambda表达式传递一个LAMDA功能,这是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参考。

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点击。