2011-09-09 12 views
1

私は、次のスイッチケースを使用してさまざまなボタンを処理し、それぞれの場合にアクティビティを開始します。同じスコープ内でインテント変数を再利用することは危険ですか?

私はインテントオブジェクト(i)を外側に移動する必要がありますか?プライベートクラス属性として再利用する必要がありますか?または、角かっこで各ケースをラップする必要があります。ユニークな名前を付けずに名前 "i"を再使用できますか?どちらが安全/より良いですか?同じオブジェクトを再利用するリスクはありますか?

@Override 
public void onClick(View v) { 
    switch (v.getId()){ 

    case R.id.button_numbers: 
     Intent i = new Intent(v.getContext(), DrillActivity.class); 
     i.putExtra("word_list", R.raw.wl_numbers); 
     startActivity(i); 
     break; 

    case R.id.button_colors: 
     Intent i2 = new Intent(v.getContext(), DrillActivity.class); 
     i2.putExtra("word_list", R.raw.wl_colors); 
     startActivity(i2); 
     break; 

    case R.id.button_daysmonths: 
     Intent i3 = new Intent(v.getContext(), DrillActivity.class); 
     i3.putExtra("word_list", R.raw.wl_daysmonths); 
     startActivity(i3);   
     break; 

    default: 
     break; 
    } 
} 

答えて

5

case R.id.button_numbers: 
    Intent i = new Intent(v.getContext(), DrillActivity.class); 
    i.putExtra("word_list", R.raw.wl_numbers); 
    startActivity(i); 
    break; 

case R.id.button_colors: 
    i = new Intent(v.getContext(), DrillActivity.class); 
    i.putExtra("word_list", R.raw.wl_colors); 
    startActivity(i); 
    break; 

case R.id.button_daysmonths: 
    i = new Intent(v.getContext(), DrillActivity.class); 
    i.putExtra("word_list", R.raw.wl_daysmonths); 
    startActivity(i);   
    break; 

default: 
    break; 

先端はしかし、すべてのケース以来 は、あなたが同じ活性を呼び出すのと同じであり、あなたが行うすべてのtehの余分のために別の値を入れて、私のような何かを示唆しています私はこのようにします:

@Override 
public void onClick(View v) { 
    Intent i = new Intent(v.getContext(), DrillActivity.class); 
    switch (v.getId()){ 
     case R.id.button_numbers: 
      i.putExtra("word_list", R.raw.wl_numbers); 
      break; 
     case R.id.button_colors: 
      i.putExtra("word_list", R.raw.wl_colors); 
      break; 
     case R.id.button_daysmonths: 
      i.putExtra("word_list", R.raw.wl_daysmonths); 
      break; 
     default: return; 
    } 
    startActivity(i); 
} 

私はそれがはるかに明確だと思います。

3

変数を再利用することができます。新しいオブジェクトへの新しい参照になります。

int wordListValue; 
switch ... 

case R.id.button_numbers: 
    wordListValue = R.raw.wl_numbers; 
    break; 


case R.id.button_colors: 
    wordListValue = R.raw.wl_colors; 
    break; 

case R.id.button_daysmonths: 
    wordListValue = R.raw.wl_daysmonths; 
    break; 

default: 
    return; 
} 

     Intent i = new Intent(v.getContext(), DrillActivity.class); 
     i.putExtra("word_list", wordListValue); 
     startActivity(i); 
+0

+1の2番目のコードです。それははるかにクリーン&それは私もそれをやる方法です。しかし、あなたの最初のものは動作しません。私はそれを試していないが、私はあなたが***宣言する必要があると思う、私は; *** switch文の前に。それ以外の場合は、2番目のケースが真であれば表示されません。 – OceanBlue

+0

あなたはそうです。私は今それを修正するつもりです。ありがとう – IncrediApp

+0

また、デフォルトのケースがヒットし、wordListValueがゼロの場合、2番目のコードでエラーが発生する可能性がありますので、最後の3行をif(wordListValue!= 0)にラップして、ファンキーなエラーを表示しないようにしてください。 – JPM

関連する問題