2013-03-25 90 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()