您的位置:首页 > 移动开发 > Android开发

关于ListView中EditText点击弹出软键盘及软键盘弹出后的焦点问题

2016-06-23 15:00 531 查看

今天项目购物车要改成可以点击输入购买件数,一开始一直弹不出软键盘,焦点也有问题,百度了下,看到别人是这么解决的

在ListView中,每次弹出软键盘后就会重新调用getView()方法,导致EditText失去焦点。

解决办法:在getView()方法中添加监听器:

editText.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
index = position;
}
return false;
}
});

并且在getView方法结束前为EditText添加焦点:

editText.clearFocus();
if (index != -1 && index == position) {
// 如果当前的行下标和点击事件中保存的index一致,手动为EditText设置焦点。
editText.requestFocus();
}

但是这样,又会有新的问题出现,EditText中的光标停在最前面,并且不闪动,点击软键盘输入任何东西也不会在EditText中显示,这样,就要在EditText获得焦点后再做一个处理:

editText.setSelection(editText .getText().length());

这样,问题就很好的解决了。

如果问题软键盘弹不出 检查布局文件是否设置了

android:descendantFocusability="beforeDescendants"
另外,我的购物车件数加减是要调接口改变数据库数量的,虽然我很不解为什么后台要怎么做,但还是按照他的想法来吧,所以,怎么知道输入已经完成了呢?我是通过这样解决的

tv_count.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE){
MyUtils.hideSoftKeyboard(context,tv_count);
submitNum(model.getGood_id(), Integer.parseInt(tv_count.getText().toString()),true,tv_count);
tv_count.clearFocus();
return true;
}
return false;
}
});

到此,这个功能就完成了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息