我的自定义视图组出现了一个奇怪的问题:
它是一个扩展的FrameLayout,表示一个自定义切换按钮,它在左侧和右侧移动了一个处理程序。 (ala iPhone开关切换按钮) 我通过这行代码移动这个处理程序:
mHandler.layout(0, 0, right, 0);
但是当我的活动中的另一个视图(EditText)获得焦点时,会出现软键盘。好吧,这个事件使我的自定义视图组处于初始配置状态(如果我在“状态开启”配置中切换了自定义视图组,它会打开初始的“状态关闭”配置。
就像系统不记得在Activity.onCreate()之后布局发生了变化。
有没有人找到解决方案?
答案 0 :(得分:1)
我解决了这个问题。这不是关于onSaveInstanceState和onRestoreInstanceState的问题,因为活动不会出现onPause或其他任何问题。 我注意到在我的自定义视图失去焦点后,它会调用其onLayout方法并使用标志change = false。
我所采取的最简单的方法是用这个方法覆盖该方法:
@Override
protected void onLayout(boolean changed, int left, int top, int right,
int bottom) {
if( changed ){
super.onLayout(changed, left, top, right, bottom);
}
}
解决了这个问题。我的布局视图仅在我想要时更改,而不是在失去焦点时更改。
答案 1 :(得分:0)
您应该在自定义视图中覆盖onSaveInstanceState和onRestoreInstanceState,并执行保存内部状态所需的一切。
如果您从现有的View类派生,那么不要忘记调用父类实现来保存实例状态。