2013-03-25 86 views
8

我有一個佈局4個按鈕,併爲每個按鈕的,他們有屬性的Android視圖我的活動(使用具有4個按鍵的佈局),我有這樣的:比較平等兩個視圖

public class Blah extends Activity{ 
    String fileName; 
    Button one; 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_number_players_selection_screen); 
     one = (Button) findViewById(R.id.number_players_one); 
    } 


    public void numberChosen(View v){ 
     if(v == one){        // <-------- first way 
      System.out.println("first way");  
     } 
     if(v.getId()==R.id.number_players_one){ // <-------- second way 
      System.out.println("second way"); 
     } 
    } 
} 

,如果你注意到的方法numberChosen會發生什麼,這兩種方式之間,哪一個更好?還是他們都在做同樣的事情?

一邊注意,是做android:onClick="numberChosen"任何更好或更差只是設置View.onClickListener而不是?

+2

第二種方法解決工作比第一種方法更好。你也可以在Blah類中實現onClickListner(即你的活動) – 2013-03-25 10:11:03

回答

4

從我的角度來看,兩種方法都是正確的,他們完成了工作。 從性能來看,第二種方式可能是會好一些。

另外,像一些人建議的那樣,如果您在庫項目中使用ADT 14或更高版本,使用開關盒可能是不可能的,因爲ID不是最終的(常量),所以您必須使用如果只是在這種情況下的陳述。

0
public class Blah extends Activity implements OnClickListener{ 
       String fileName; 
       Button one; 
       @Override 
       public void onCreate(Bundle savedInstanceState){ 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_number_players_selection_screen); 
        one = (Button) findViewById(R.id.number_players_one); 

one..setOnClickListener(this); // way 1 to do that 

    // more better way would be customized for whole app 

    **one..setOnClickListener(new MyClickListener());** 
       } 


      /** The click event observer pattern for the different items on the view 
       * 
       * @see android.view.View.OnClickListener#onClick(android.view.View) 
       */ 
       @Override 
       public void onClick(View v) { 
        switch (v.getId()) { 
        case R.id.number_players_one: 

         // best way 1 
         break; 
      default : 
      break; 
      } 

      } 

      } 

更定製實現,你可以有不同的部分定製監聽器在應用程序爲:

public class MyClickListener implements OnClickListener { 
    private Context mContext; 
    @Override 
    public void onClick(View v) { 
     mContext = v.getContext(); 

     switch (v.getId()) { 
     case R.id.number_players_one: 

     // best way 2 and more better among all 
      break; 

     default: 
      break; 
     } 
    } 


} 
0

我建議你使用switch情況下,它更readable.Its不要緊天氣您正在使用android:onClick="numberChosen"View.onClickListener()

2

我使用分鐘SDK 14和該解決方案是不是在某些情況下(只爲我的名單適配器的第一行工作)

findViewById(R.id.item_icon_favourite) == view 

用的ID比較

R.id.item_icon_favourite == view.getId()