我怎样才能让这个更好
好吧,我在这里有一个开关案例陈述,正在通过尝试每一个选项。基本上我想要的东西,如果用户在文本框中输入字母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;
如果我将图片设置为数组然后从那里出发,会更好吗?我用尽包括如果开关的情况下,但它没有在所有的工作....
我预先populae数组和调用:
gestureViewer.setBackgroundResource(myArray[ch - 'A']);
它会使你的代码多更具可读性。
您也可以通过Map<Character,MyImage>
来完成 - 它可能允许您在未来轻松添加更多功能。
如果你这样做,invokation将使用
gestureViewer.setBackgroundResource(myMap.get(ch));
注意,阵列/地图需要在应用程序运行时只有一次填充。
地图?你有一个教程链接? – 2012-03-20 16:44:10
@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
谢谢你的教程我会读它 – 2012-03-20 17:47:55
例如,您可以将所有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'
Ima试试这个,看看它是如何工作的我会让你知道谢谢 – 2012-03-20 16:44:37
当你说其他部分{你是什么意思standardImage?就像我想在索引结束时加载的默认值一样?或者是一个默认的人在错误的时候加载? – 2012-03-20 16:48:27
不,这将是图像,一旦用户输入的东西不是A-Z,例如数字,它就会被加载。 – devsnd 2012-03-20 16:57:32
尝试:
public void afterTextChanged(Editable s) {
char ch = words.getText().toString().charAt(0);
int id = getResources().getIdentifier("letters" + ch, "drawable", context.getPackageName())
gestureViewer.setBackgroundResource(id);
}
}
我认为使用数组将是一个好主意。你可能会最终解决你的问题,首先简化它 – dldnh 2012-03-20 16:35:42
是啊这就是我认为,我刚刚开始编程不久前,所以即时通讯不是很好阵列哈哈...... – 2012-03-20 16:38:47
保持在它,你会得到那里 – dldnh 2012-03-20 16:40:23