Android工具箱中的TextFields中,EditText的inputType定义的N种类型,包括了常用的text,number..
下面代码添加一个number类型的EditText并设置它的数字输入范围示范。
设置输入数字范围的代码:
如果使用屏蔽的代码,就会出现下面问题:
Cannot refer to a non-final variable et inside an inner class defined in a different method
原因见文章:
主要原因是:
在方法中定义的变量时局部变量,当方法返回时,局部变量(str1,str2)对应的栈就被回收了,当方法内部类去访问局部变量时就会发生错误。当在变量前加上final时,变量就不在是真的变量了,成了常量,这样在编译器进行编译时(即编译阶段)就会用变量的值来代替变量,这样就不会出现变量清除后,再访问变量的错误。
下面贴出限定的全部代码:
-
private int MIN_MARK = 0;
-
private int MAX_MARK = 100;
-
//private void setRegion(EditText et)
-
private void setRegion( final EditText et)
-
{
-
et.addTextChangedListener(new TextWatcher() {
-
@Override
-
public void onTextChanged(CharSequence s, int start, int before, int count) {
-
if (start > 1)
-
{
-
if (MIN_MARK != -1 && MAX_MARK != -1)
-
{
-
int num = Integer.parseInt(s.toString());
-
if (num > MAX_MARK)
-
{
-
s = String.valueOf(MAX_MARK);
-
et.setText(s);
-
}
-
else if(num < MIN_MARK)
-
s = String.valueOf(MIN_MARK);
-
return;
-
}
-
}
-
}
-
-
@Override
-
public void beforeTextChanged(CharSequence s, int start, int count,
-
int after) {
-
}
-
-
@Override
-
public void afterTextChanged(Editable s)
-
{
-
if (s != null && !s.equals(""))
-
{
-
if (MIN_MARK != -1 && MAX_MARK != -1)
-
{
-
int markVal = 0;
-
try
-
{
-
markVal = Integer.parseInt(s.toString());
-
}
-
catch (NumberFormatException e)
-
{
-
markVal = 0;
-
}
-
if (markVal > MAX_MARK)
-
{
-
Toast.makeText(getBaseContext(), "分数不能超过100", Toast.LENGTH_SHORT).show();
-
et.setText(String.valueOf(MAX_MARK));
-
}
-
return;
-
}
-
}
-
}
-
});
-
}
参考文献:
http://blog.csdn.net/dahuaishu2010_/article/details/8296687
阅读(30682) | 评论(0) | 转发(0) |