我的应用程序中有一个自动完成文本视图,它在Android Jelybean和Kitkat上按预期工作,但在Lolipop没有。 首先,在活动的第一次运行时(安装后),下拉列表根本不会出现,但是从第二次开始,然后显示正常。 但最重要的是,当我从列表中选择一个项目时,它没有得到正确的值。以下是相关代码:
mInput.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Map<String, String> map = (Map<String, String>) parent
.getItemAtPosition(position);
Iterator<String> strInterator = map.keySet().iterator();
while(strInterator.hasNext()) {
String key=(String)strInterator.next();
String value = (String) map.get(key);
valueChar = parent.getItemAtPosition(position).toString();
String temp = valueChar.replace("{Name=", "");
valueChar = temp.substring(0, temp.indexOf(","));
valueNum = value.replaceAll("\\s", "");
Log.i("mInput text1:", mInput.getText().toString());
mInput.setText(valueNum);
Log.i("mInput text2:", mInput.getText().toString());
mInput.setSelection(mInput.getText().length());
Log.i("mInput text3:", mInput.getText().toString());
}
}
});
}
列表显示姓名和电话号码。当我选择一个项目时,它必须删除所有字符,只显示数字(电话号码)。这在以前的Android版本中按预期工作,但在Lolipop上,它显示了名称。从Log我可以看到valueNum获取正确的值(电话号码),但是setText以某种方式将valueNum值更改为name,因为这些日志获取了名称。 我的代码中有什么问题可能导致这种情况,或者在Android L上使用AutoComplete textView是不兼容的吗?
更新 这是日志输出。似乎命令运行2次。第一个值可以,但第二个更改。
I / mInput text1 :: {Phone = 6997777777,Name = Zivol} I / mInput text2 :: 6997777777 I / mInput text3 :: 6997777777 I / mInput text1 :: 699777777 I / mInput text2 :: Zivol I / mInput text3 :: Zivol
答案 0 :(得分:0)
似乎问题来自&#34; replaceAll&#34;功能。这在lolipop android版本上表现不同。我最近在这里找到了这种方法: Extract digits from a string in Java
public static String stripNonDigits(
final CharSequence input /* inspired by seh's comment */){
final StringBuilder sb = new StringBuilder(
input.length() /* also inspired by seh's comment */);
for(int i = 0; i < input.length(); i++){
final char c = input.charAt(i);
if(c > 47 && c < 58){
sb.append(c);
}
}
return sb.toString();
}
这样我得到了正确的结果。感谢 Sean Patrick Floyd