0

我有很多 1 Button 的代码。有什么方法可以缩短此代码。

      pic1.setOnClickListener(new View.OnClickListener() {              
 public void onClick(View v) {            
      pic1.setTag("beck");      
 if  (pic2.getTag()==("beck")){            
  new CountDownTimer(500,500) {  
  public void onTick(long millisUntilFinished) {}
  public void onFinish() {
     player=MediaPlayer.create(MainActivity.this,R.raw.correct);
     player.start();
     pic1.setVisibility(View.INVISIBLE);
     pic2.setVisibility(View.INVISIBLE);                        
     }}.start();            
     }
 if (pic1.getTag()==("beck")){pic1.setBackgroundResource(R.drawable.becks);}    
 if (pic3.getTag()==("rob") || pic4.getTag()==("rob")
   ||pic5.getTag()==("shan") || pic6.getTag()==("shan")
   ||pic7.getTag()==("mel") || pic8.getTag()==("mel")
   ||pic9.getTag()==("dumm") || pic10.getTag()==("dumm")
   ||pic11.getTag()==("jboot") || pic12.getTag()==("jboot")  ) {
     pic1.setTag ("boot");pic1.setBackgroundResource(R.drawable.jordboots);
     pic2.setTag ("boot");pic2.setBackgroundResource(R.drawable.jordboots);
     pic3.setTag ("boot");pic3.setBackgroundResource(R.drawable.jordboots);
     pic4.setTag ("boot");pic4.setBackgroundResource(R.drawable.jordboots); 
     pic5.setTag ("boot");pic5.setBackgroundResource(R.drawable.jordboots);
     pic6.setTag ("boot");pic6.setBackgroundResource(R.drawable.jordboots);
     pic7.setTag ("boot");pic7.setBackgroundResource(R.drawable.jordboots); 
     pic8.setTag ("boot");pic8.setBackgroundResource(R.drawable.jordboots);
     pic9.setTag ("boot");pic9.setBackgroundResource(R.drawable.jordboots);
     pic10.setTag ("boot");pic10.setBackgroundResource(R.drawable.jordboots); 
     pic11.setTag ("boot");pic11.setBackgroundResource(R.drawable.jordboots); 
     pic12.setTag ("boot");pic12.setBackgroundResource(R.drawable.jordboots);  }    

     }});   

例如,创建第二个类来保存代码,以便我可以在需要时调用它。或方法如

pic1,pic2,pic3.setTag("boot")

我创建了第二个类并将标签和背景重置放入其中。

public class resetbuttons extends MainActivity{
public void buttreset () {
 pic1.setTag("boot");
 pic1.setBackgroundResource(R.drawable.jordboots); 
 pic2.setTag("boot");
 pic2.setBackgroundResource(R.drawable.jordboots);
 // etc etc for 12 buttons      }}

并代替 if 语句标记和图像代码,我放了这个。

resetbuttons parent = new resetbuttons();
parent.buttreset();   

所有代码看起来都很干净,但是当我在调用 buttreset 时立即运行它时,应用程序崩溃了。我需要在清单或 xml 代码中添加任何内容吗?如果不是我的错误在哪里。这是我想在我的主要活动中摆脱的主要代码

4

3 回答 3

1

使用数组/集合for-loop来一次又一次地执行相同的操作:

View[] views = {pic1, pic2, pic3, pic4, pic5, pic6, pic7, pic8, pic9, pic10, pic11, pic12};

for(View v : views){
    v.setTag("boot");
    v.setBackgroundResource(R.drawable.jordboots);
}

此外,如果要比较对象,则需要将全部更改==为。equals()String

于 2013-11-04T16:40:54.053 回答
0

您可以使用例如Guava'sImmutableList并将“允许”的字符串放在那里:

private static final ImmutableList<String> listOfAllowedStrings = 
    ImmutableList<String>.of("beck", "rob", "shan"); //...etc.

然后遍历每张图片,只需检查该值是否在该列表中:

if(listOfAllowedStrings.contains(picX.getTag())) {
    ...
}
于 2013-11-04T16:43:54.137 回答
0

好吧,对于初学者,您可以替换它:

 pic1.setTag ("boot");pic1.setBackgroundResource(R.drawable.jordboots);
 pic2.setTag ("boot");pic2.setBackgroundResource(R.drawable.jordboots);
 pic3.setTag ("boot");pic3.setBackgroundResource(R.drawable.jordboots);
 pic4.setTag ("boot");pic4.setBackgroundResource(R.drawable.jordboots); 
 pic5.setTag ("boot");pic5.setBackgroundResource(R.drawable.jordboots);
 pic6.setTag ("boot");pic6.setBackgroundResource(R.drawable.jordboots);
 pic7.setTag ("boot");pic7.setBackgroundResource(R.drawable.jordboots); 
 pic8.setTag ("boot");pic8.setBackgroundResource(R.drawable.jordboots);
 pic9.setTag ("boot");pic9.setBackgroundResource(R.drawable.jordboots);
 pic10.setTag ("boot");pic10.setBackgroundResource(R.drawable.jordboots); 
 pic11.setTag ("boot");pic11.setBackgroundResource(R.drawable.jordboots); 
 pic12.setTag ("boot");pic12.setBackgroundResource(R.drawable.jordboots); 

有了这个

for (int i = 0;i < pic.length;i++)
    {
    pic[i].setTag("boot");
    pic[i].setBackgroundResource(R.drawable.jordboots);
    }

但要做到这一点,您需要将 pic 变量正确地放入数组中。我不知道它们是什么类,也不知道你需要多少个,所以我不能告诉你如何声明数组。我只能说:

*NAME OF CLASS*[] pic = new *NAME OF CLASS* [*NUMBER OF THINGS*]();

另外,一定要初始化数组。祝你好运!

于 2013-11-04T16:36:37.520 回答