• ListView 中含有 EditText 导致焦点丢失的问题


    ListView 中的 item 中有 EditText 时。

    如果activity的输入法选项设置为 android:windowSoftInputMode="adjustResize"

    当点击一个EditText弹出输入法时时,会导致界面layout变化,导致 listview 重新调用getView刷新界面,各个itemView的状态会被清除,导致当前点击的EditText的焦点丢失,导致无法输入。

    解决方法: 记住当前hasFocus的Edit的position,在getView的时候重新设置focus。

     @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
            Log.e("ss", "getView:" + position);
    
            View v = null;
            ViewHolder vh = null;
            if (convertView != null) {
                v = convertView;
                vh = (ViewHolder) v.getTag();
            } else {
                v = mInflater.inflate(R.layout.item, parent, false);
                vh = new ViewHolder();
                vh.infoTxt = (TextView) v.findViewById(R.id.info_txt);
                vh.editTxt = (EditText) v.findViewById(R.id.edit_txt);
                vh.editTxt.setOnFocusChangeListener(mListener);
                v.setTag(vh);
            }
    
            vh.editTxt.setTag(position);
            vh.infoTxt.setText(position + "");
    
            if (mFocusPosition == position) {
                vh.editTxt.requestFocus();
            } else {
                vh.editTxt.clearFocus();
            }
    
            return v;
        }
    
        int mFocusPosition = -1;
    
        OnFocusChangeListener mListener = new OnFocusChangeListener() {
    
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                int position = (Integer) v.getTag();
                if (hasFocus) {
                    mFocusPosition = position;
                }
                Log.e("test", "onFocusChange:" + position + " " + hasFocus);
            }
        };
  • 相关阅读:
    测试用例的设计
    测试经理的职责
    如果开发认为这不是bug,对QA来说应该怎么处理?
    我选择测试的过程
    API的知识点
    测试人员需要的技能
    时区转换的计算方式
    学习能力的必需
    制图工具
    JSON序列和反序列1
  • 原文地址:https://www.cnblogs.com/zijianlu/p/3402321.html
Copyright © 2020-2023  润新知