0

だから今、私はいくつかのコードを整理していて、ボタンのelse / ifがたくさんあり、それを実行してきれいにする良い方法は何だろうと思っていましたか?

12 個のボタンがあり、各ボタンをクリックすると音が鳴り、色が変わります。これには方法がありますが、if/elseの代わりにボタンを検出するだけの良い方法があるのではないかと思っていましたか?

public void onClick(View v) {
    int id = v.getId();
    changeToWhite();
    if (id == R.id.a_button) {
        currentButton(a, 81);
    } else if (id == R.id.aSharp_button) {
        currentButton(aSharp, 82);
    } else if (id == R.id.b_button) {
        currentButton(b, 83);
    } else if (id == R.id.c_button) {
        currentButton(c, 72);
    }

等...

それで、これを持つより良い方法はありますか?else/if が多いのはよくないので、改善したいと思いました。ありがとう!!

4

4 に答える 4

2

代わりに「switch-case」を使用できます。

>

public void onClick(View v) {
switch(v.getId())
{
case R.id.a_button:
changeToWhite();
break;
case R.id.aSharp_button:
currentButton(aSharp,82);
break;
.....
default:
break;
}

}

于 2013-03-24T02:39:57.943 に答える
1

まず第一に、if/else ネストを使用しても実質的にペナルティはありません。このレベルの細かなアプリ管理を試す必要はありません。あなたはそれから何の利益も得ません。読みやすさの観点から、この点を最適化することをもっと考えてみてください。

さて、あなたの質問に答えるために、代わりに switch/case コンストラクトを使用できます。

public void onClick(View v) {
    switch (item.getItemId()) {

        case R.id.aBar_item1:
         //Item onClick logic
         return true;

        case R.id.aBar_item2:
        //Item onClick logic
        return true;

        case R.id.aBar_item3:
        //Item onClick logic
        return true;

        ...
    }  
}
于 2013-03-24T02:55:13.703 に答える
1

代わりに case ステートメントを使用するのはどうですか?

    public void onClick(View v) {
       // Perform action on click
      switch(v.getId()) {
        case R.id.a_button:
          currentButton(a, 81);
          break;
        case R.id.aSharp_button:
          currentButton(aSharp, 82);
          break;
        /*
          and the rest of the cases here.
        */

      }
   }
于 2013-03-24T02:40:44.800 に答える
1

XML を使用して onClick プロパティを設定していると思います。

より簡単で整然とした方法は、匿名内部クラスを使用することです。

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_foo);

    findViewById(R.id.view_buttonone).setOnClickListener(new OnClickListener(){
        public void onClick(View view){
            // button one clicked
        }
    });

    findViewById(R.id.view_buttontwo).setOnClickListener(new OnClickListener(){
        public void onClick(View view){
            // button two clicked
        }
    });
}
于 2013-03-24T02:42:06.107 に答える