在做项目里监听键盘弹起的时候遇到了adapter不能更新的原因:找了好久终于找到原因:是布局文件中使用了自定义的layout,同时layout中复写了onLayout方法
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
if (!mHasInit) {
mHasInit = true;
mHeight = b;
if (mListener != null) {
mListener.onKeyBoardStateChange(KEYBOARD_STATE_INIT);
}
} else {
mHeight = mHeight < b ? b : mHeight;
}
if (mHasInit && mHeight > b) {
mHasKeybord = true;
if (mListener != null) {
mListener.onKeyBoardStateChange(KEYBOARD_STATE_SHOW);
}
Log.w(TAG, "show keyboard.......");
}
if (mHasInit && mHasKeybord && mHeight == b) {
mHasKeybord = false;
if (mListener != null) {
mListener.onKeyBoardStateChange(KEYBOARD_STATE_HIDE);
}
Log.w(TAG, "hide keyboard.......");
}
}
外部监听调用到了onlayout方法导致的adapter不能及时更新
我的处理是在数据加载完了之后(使用延时设置监听的方式)
/**
* 延时设置键盘监听,避免adapter不能及时刷新
*/
private void setDelayOnkbdStateListener(){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
root.setOnkbdStateListener(onKybdsChangeListener);
}
},5000);
};