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) {
//保存数据
}
});