Android视图比较两个视图是否相等

Dav*_* T. 8 android android-layout

我在布局上有4个按钮,对于每个按钮,它们都具有以下属性:

android:onClick="numberChosen"

现在,我计划做的是在我的活动中(使用具有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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你注意到方法中发生了什么numberChosen,在这两种方式之间,哪一个更好?或者他们都在做同样的事情?

在旁注,是做android:onClick="numberChosen"更好还是更糟,而不仅仅是设置View.onClickListener

Lee*_*elo 5

从我的角度来看,这两种方法都是正确的,它们都能完成工作。从性能角度来看,第二种方式可能更好。

此外,就像一些人建议的那样,如果您在库项目中使用 ADT 14 或更高版本,则可能无法使用switch case ,因为 ID 不是最终的(常量),因此您必须仅在这种情况下使用 if 语句。


Cha*_*tsu 5

我使用的是 min SDK 14,此解决方案在某些情况下不起作用(仅适用于我的列表适配器的第一行)

findViewById(R.id.item_icon_favourite) == view
Run Code Online (Sandbox Code Playgroud)

通过比较ID解决

R.id.item_icon_favourite == view.getId()
Run Code Online (Sandbox Code Playgroud)