2017-04-04 64 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點擊。