listView 控件焦点方面的问题

来源:互联网 发布:mysql定时备份 编辑:程序博客网 时间:2024/05/16 11:40

1.种情况

关于android:descendantFocusability,有三个属性值,

beforeDescendants
viewgroup会优先其子类控件而获取到焦点

afterDescendants
viewgroup只有当其子类控件不需要获取焦点时才获取焦点

blocksDescendants
viewgroup会覆盖子类控件而直接获得焦点

  <ListView         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:descendantFocusability="beforeDescendants"         >

2.种情况 子控件点击事件优先级高于item
item 里面的控件可设置

android:focusable="false"           android:focusableInTouchMode="false"           android:clickable="false"   

3.种, 比如里面是个比较大的。。多行edittext是会 自己滑动的,

mEditText.setOnTouchListener(this); @Overridepublic boolean onTouch(View v, MotionEvent event) {  switch (v.getId()) {      case R.id.edit_text:     v.getParent().requestDisallowInterceptTouchEvent(true);   switch (event.getAction()) {     case MotionEvent.ACTION_UP:  v.getParent().requestDisallowInterceptTouchEvent(false);break;}}return false;}

4. 当点击获取焦点的控件(如:edittext)返回键,弹出键盘,点击返回,再点击edittext,键盘会挡住控件

这时候要设置 item内的控件 失去焦点。
当输入法键盘显示的时候,你点击系统的返回键事件被捕获了,而不会在onKeyDown里执行。

android:windowSoftInputMode=”adjustPan”

@Overridepublic boolean dispatchKeyEventPreIme(KeyEvent event) {    if (context != null) {        InputMethodManager imm = (InputMethodManager) context                .getSystemService(Context.INPUT_METHOD_SERVICE);        if (imm.isActive() && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {            //释放焦点            for (int i = 0; i < getChildCount(); i++) {                View view = getChildAt(i);                EditText editText = (EditText) view                        .findViewById(R.id.editText1);                editText.clearFocus();            }        }    }    return super.dispatchKeyEventPreIme(event);}

适配器不要重复利用

@Override    public View getView(int position, View convertView, ViewGroup parent) {        convertView = mLayoutInflater.inflate(R.layout.list_item, null);        return convertView;    }

5. 获取edittext内容

editText1.addTextChangedListener(new TextWatcher() {            @Override            public void onTextChanged(CharSequence s, int start, int before,                    int count) {            }            @Override            public void beforeTextChanged(CharSequence s, int start, int count,                    int after) {            }            @Override            public void afterTextChanged(Editable s) {                //保存数据            }        }); 
0 0
原创粉丝点击