解决listview里面edittext焦点问题

来源:互联网 发布:编程是什么 编辑:程序博客网 时间:2024/05/17 07:00

由于每次弹起输入框,输入法,listview的界面都会重置布局

导致edittext失去焦点,或者焦点错乱

所以我们必须在listview里面对edittext特殊处理

由于重置布局,必须走getview里面的代码,我们可以在getview里面标记光标位置,在getview结束前重新设置焦点

问题完美解决


//设置edittext的输入改变监听    
 vh.guige_kuncun_item.setOnFocusChangeListener(new View.OnFocusChangeListener() {                @Override                public void onFocusChange(View v, boolean hasFocus) {                    if (hasFocus){                        vh.guige_kuncun_item.addTextChangedListener(new TextWatcher() {                            @Override                            public void beforeTextChanged(CharSequence s, int start, int count, int after) {                            }                            @Override                            public void onTextChanged(CharSequence s, int start, int before, int count) {                            }                            @Override                            public void afterTextChanged(Editable s) {                                    if (s.length() == 0) {                                        guigelist.get(position).setGuige_kucun(0);                                        ShowToast("请设定规格库存!");                                    } else                                        guigelist.get(position).setGuige_kucun(Integer.parseInt(s.toString()));                                        index=position;                                 }                        });                    }                }            });//            vh.guige_price_item.addTextChangedListener(new MyTextWatcher(vh,0));//            vh.guige_kuncun_item.addTextChangedListener(new MyTextWatcher(vh,1));
记录光标 焦点位置            vh.guige_kuncun_item.setOnTouchListener(new View.OnTouchListener() {                @Override                public boolean onTouch(View v, MotionEvent event) {                    // TODO Auto-generated method stub                    if (event.getAction() == MotionEvent.ACTION_UP) {                        index = position;                        priceitem=-1;                        Log.i("0302", "onTouch"+index);                    }                    return false;                }            });            vh.guige_price_item.setOnTouchListener(new View.OnTouchListener() {                @Override                public boolean onTouch(View v, MotionEvent event) {                    // TODO Auto-generated method stub                    if (event.getAction() == MotionEvent.ACTION_UP) {                        priceitem = position;                        index=-1;                        Log.i("0302", "onTouch"+index);                    }                    return false;                }            });            vh.guige_price_item.clearFocus();            vh.guige_kuncun_item.clearFocus();
重置焦点            if (priceitem != -1 && priceitem== position) {                // 如果当前的行下标和点击事件中保存的index一致,手动为EditText设置焦点。                vh.guige_price_item.requestFocus();            }            if (index != -1 && index == position) {                // 如果当前的行下标和点击事件中保存的index一致,手动为EditText设置焦点。                vh.guige_kuncun_item.requestFocus();            }重置光标            vh.guige_kuncun_item .setSelection(vh.guige_kuncun_item .getText().length());            vh.guige_price_item .setSelection(vh.guige_price_item .getText().length());