listView 控件焦点方面的问题

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); 

@Override
public 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”

@Override
public 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) {
                //保存数据
            }
        }); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空白的泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值