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");
        }
    }
}

これらの2つの方法の間で、メソッドで何が起こるかに注意numberChosenすると、どちらが優れていますか?それとも、両方ともまったく同じことをしていますか?

ちなみに、代わりにandroid:onClick="numberChosen"設定するよりも良いことも悪いこともありますか?View.onClickListener

4

4 に答える 4

5

私の観点からは、どちらの方法も正しいです、彼らは仕事を成し遂げます。パフォーマンスの観点からは、2番目の方法の方が良いかもしれません。

さらに、いくつかの提案のように、ライブラリプロジェクトでADT 14以降を使用している場合、IDが最終(定数)ではないため、switch caseを使用できない場合があります。その場合は、ifステートメントのみを使用する必要があります。 。

于 2013-03-25T10:22:38.840 に答える
5

min SDK 14を使用していますが、このソリューションが機能しない場合があります(リストアダプターの最初の行でのみ機能します)

findViewById(R.id.item_icon_favourite) == view

IDと比較して解決

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 に答える