2012-03-20 142 views
0

好吧,我在这里有一个开关案例陈述,正在通过尝试每一个选项。基本上我想要的东西,如果用户在文本框中输入字母A的背景将更改为b!如果他们不输入字母A,那么我希望它停止执行代码。但是,如果用户输入的内容发生了变化,例如当背景为字母A时,例如字母Q,则背景将变为字母R,而不是告诉用户他们错了。基本上我想知道如果我可以阻止更改背景,如果用户不输入他们在这里的字母是代码。我怎样才能让这个更好

 public void afterTextChanged(Editable s) { 
       char ch = words.getText().toString().charAt(0); 

       switch(ch - 'A') { 

       case 0: 
        //A; 

        gestureViewer.setBackgroundResource(R.drawable.lettersb); 

        break; 
       case 1: 
        gestureViewer.setBackgroundResource(R.drawable.lettersc); 
        break; 
       case 2: 
        gestureViewer.setBackgroundResource(R.drawable.lettersd); 

        break; 
       case 3: 
        gestureViewer.setBackgroundResource(R.drawable.letterse); 

        break; 
       case 4: 
        gestureViewer.setBackgroundResource(R.drawable.lettersf); 
        break; 
       case 5: 
        gestureViewer.setBackgroundResource(R.drawable.lettersg); 
       break; 
       case 6: 
        gestureViewer.setBackgroundResource(R.drawable.lettersh); 
        break; 
       case 7: 
        gestureViewer.setBackgroundResource(R.drawable.lettersi); 
        break; 
       case 8: 
        gestureViewer.setBackgroundResource(R.drawable.lettersj); 
        break; 
       case 9: 
        gestureViewer.setBackgroundResource(R.drawable.lettersk); 
        break; 
       case 10: 
        gestureViewer.setBackgroundResource(R.drawable.lettersl); 
        break; 
       case 11: 
        gestureViewer.setBackgroundResource(R.drawable.lettersm); 
        break; 
       case 12: 
        gestureViewer.setBackgroundResource(R.drawable.lettersn); 
        break; 
       case 13: 
        gestureViewer.setBackgroundResource(R.drawable.letterso); 
        break; 
       case 14: 
        gestureViewer.setBackgroundResource(R.drawable.lettersp); 
        break; 
       case 15: 
        gestureViewer.setBackgroundResource(R.drawable.lettersq); 
        break; 
       case 16: 
        gestureViewer.setBackgroundResource(R.drawable.lettersr); 
        break; 
       case 17: 
        gestureViewer.setBackgroundResource(R.drawable.letterss); 
        break; 
       case 19: 
        gestureViewer.setBackgroundResource(R.drawable.letterst); 
        break; 
       case 20: 
        gestureViewer.setBackgroundResource(R.drawable.lettersu); 
        break; 
       case 21: 
        gestureViewer.setBackgroundResource(R.drawable.lettersv); 
        break; 
       case 22: 
        gestureViewer.setBackgroundResource(R.drawable.lettersw); 
        break; 
       case 23: 
        gestureViewer.setBackgroundResource(R.drawable.lettersx); 
        break; 
       case 24: 
        gestureViewer.setBackgroundResource(R.drawable.lettersy); 
       break; 
       case 25: 
        gestureViewer.setBackgroundResource(R.drawable.lettersz); 
        break; 

如果我将图片设置为数组然后从那里出发,会更好吗?我用尽包括如果开关的情况下,但它没有在所有的工作....

+0

我认为使用数组将是一个好主意。你可能会最终解决你的问题,首先简化它 – dldnh 2012-03-20 16:35:42

+0

是啊这就是我认为,我刚刚开始编程不久前,所以即时通讯不是很好阵列哈哈...... – 2012-03-20 16:38:47

+0

保持在它,你会得到那里 – dldnh 2012-03-20 16:40:23

回答

2

我预先populae数组和调用:

gestureViewer.setBackgroundResource(myArray[ch - 'A']); 

它会使你的代码更具可读性。

您也可以通过Map<Character,MyImage>来完成 - 它可能允许您在未来轻松添加更多功能。
如果你这样做,invokation将使用

gestureViewer.setBackgroundResource(myMap.get(ch)); 

注意,阵列/地图需要在应用程序运行时只有一次填充。

+0

地图?你有一个教程链接? – 2012-03-20 16:44:10

+0

@RichTalcik它是一个将键映射到值的接口。查看[Map](http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Map.html)和类[HashMap](http:// docs。 oracle.com/javase/1.4.2/docs/api/java/util/HashMap.html),这可能与您有关。 – amit 2012-03-20 16:45:21

+0

谢谢你的教程我会读它 – 2012-03-20 17:47:55

0

例如,您可以将所有R.drawable.abc放入数组中,然后对其索引进行寻址。

int[] bgImg = {R.drawable.a, ... , R.drawable.z} 
char ch = words.getText().toString().toUpperCase().charAt(0); 

int index = ch - 'A'; 
if(index > 0 && index < bgImg.length){ 
    gestureViewer.setBackgroundResource(bgImg[index]); 
} else { 
    gestureViewer.setBackgroundResource(R.drawable.standardImage); 
} 

还要注意,我使用toUpperCase(),以确保您可以在。减去资本'A'

+0

Ima试试这个,看看它是如何工作的我会让你知道谢谢 – 2012-03-20 16:44:37

+0

当你说其他部分{你是什么意思standardImage?就像我想在索引结束时加载的默认值一样?或者是一个默认的人在错误的时候加载? – 2012-03-20 16:48:27

+0

不,这将是图像,一旦用户输入的东西不是A-Z,例如数字,它就会被加载。 – devsnd 2012-03-20 16:57:32

0

尝试:

public void afterTextChanged(Editable s) { 
     char ch = words.getText().toString().charAt(0); 
     int id = getResources().getIdentifier("letters" + ch, "drawable", context.getPackageName()) 
     gestureViewer.setBackgroundResource(id); 
} 

}

相关问题