2011-09-09 33 views
1

我正在使用以下开关盒来处理不同的按钮,并在每种情况下启动一项活动。在相同范围内重复使用意图变量是否危险?

我想知道 - 我应该将Intent对象(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

我会这样做:

@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

您可以重复使用该变量。这将是对新对象的新引用。

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多余的,我建议做这样的事情:

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代表第二个代码。它更清洁,我也是这么做的。但是,你的第一个不会工作。我没有尝试过,但我认为你需要在switch语句之前声明*** Intent i; ***。否则,如果第二种情况为真,它甚至不可见。 – OceanBlue

+0

你说得对。我现在要修复它。谢谢 – IncrediApp

+0

第二个代码可能会错误,如果默认情况下击中和wordListValue为零,可能想包装最后3行if(wordListValue!= 0),所以你不会得到一些时髦的错误。 – JPM

相关问题