9

我在布局上有 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");
        }
    }
}

如果您注意方法中发生的情况numberChosen,在这两种方法之间,哪一种更好?还是他们都在做同样的事情?

在旁注中,做android:onClick="numberChosen"的比仅仅设置更好还是更差View.onClickListener

4

4 回答 4

5

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

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

于 2013-03-25T10:22:38.840 回答
5

I am using min SDK 14 and this solution is not working in some cases (work only for first row of my list adapter)

findViewById(R.id.item_icon_favourite) == view

solved by comparing with IDs

R.id.item_icon_favourite == view.getId()
于 2016-01-26T17:36:22.860 回答
1
    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;
        }
    }


}
于 2013-03-25T10:14:39.223 回答
0

我建议您使用switch更具可读性的案例。无论您使用的是天气android:onClick="numberChosen"还是View.onClickListener()

于 2013-03-25T10:21:02.480 回答