我想向用户显示一些不同的消息,告知他们输入的长度不同。但是我的代码无法正常工作。怎么了?
EditText boxID = findViewById(R.id.vcInput);
Button button = findViewById(R.id.refresh);
TextView tv = findViewById(R.id.message)
final int inputLength = boxID.getText().toString().length();
if(inputLength >= 10 && inputLength <= 11)
{tv.setText("Refresh request sent");}
else if(inputLength<1)
{tv.setText("VC number field looks empty");} //Only this one works at any input length
else if(inputLength>1 && inputLength<10)
{tv.setText("VC number must be at least 10 digit");}
else {tv.setText("Wrong input");}
答案 0 :(得分:2)
您要寻找的可能是TextWatcher
示例用法:
boxID.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
int inputLength = s.length();
if(inputLength >= 10 && inputLength <= 11)
{tv.setText("Refresh request sent");}
else if(inputLength<1)
{tv.setText("VC number field looks empty");}
else if(inputLength>1 && inputLength<10)
{tv.setText("VC number must be at least 10 digit");}
else {tv.setText("Wrong input");}
});
答案 1 :(得分:0)
您的inputLength
是final
。最初,inputLength为空,并将其保存为最终字段inputLength
,其值为0。这就是为什么仅触发第二个条件的原因。
inputLength
的值是在触发onClick
之前设置的。
一种解决方案是使用TextWatcher
或更简单的方法是将inputLength
移到onClick
内,这样,您可以在每个onClick
触发器中为inputLength获取一个新值:
@Override
public void onClick(View v) {
final int inputLength = boxID.getText().toString().length();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if(inputLength >= 10 && inputLength <= 11)
tv.setText("Refresh request sent");
else if(inputLength<1)
tv.setText("VC number field looks empty"); //Only this one works at any input length
else if(inputLength>1 && inputLength<10)
tv.setText("VC number must be at least 10 digit");
else tv.setText("Wrong input");
}
})
}
答案 2 :(得分:0)
好的,您有3个条件(实际上是4个)
inputLength >= 10 && inputLength <= 11
inputLength<1
inputLength>1 && inputLength<10
和else
您可以这样:
if(inputLength >= 10 && inputLength <= 11)
{tv.setText("Refresh request sent");}
if(inputLength<1)
{tv.setText("VC number field looks empty");}
if(inputLength>1 && inputLength<10)
{tv.setText("VC number must be at least 10 digit");}
if(inputLength > 11)
{tv.setText("Wrong input");}
我在else if
语句中遇到了类似的问题。我不得不重建条件树。