0

我的自定义视图组有一个奇怪的问题:

它是一个扩展的 FrameLayout,表示一个自定义切换按钮,它的处理程序在左侧和右侧移动。(ala iPhone switch 切换按钮)我通过这行代码移动这个处理程序:

  mHandler.layout(0, 0, right, 0);

但是,当我的活动中的另一个视图 EditText 获得焦点时,就会出现软键盘。好吧,这个事件将我的自定义视图组带入初始配置(如果我在“状态开启”配置中切换了自定义视图组,它会打开初始“状态关闭”配置。

就像系统不记得在 Activity.onCreate() 之后布局发生了变化。

有没有人找到解决方案?

4

2 回答 2

1

我修好了。这不是关于 onSaveInstanceState 和 onRestoreInstanceState 的问题,因为活动不会继续 onPause 或其他。我注意到在我的自定义视图失去焦点后,它会调用其 onLayout 方法并使用 flag changed = false。

我最简单的方法是用这个覆盖该方法:

@Override
protected void onLayout(boolean changed, int left, int top, int right,
        int bottom) {
    if( changed ){
        super.onLayout(changed, left, top, right, bottom);
    }

}

这解决了这个问题。我的布局视图仅在我需要时更改,而不是在失去焦点时更改。

于 2012-06-26T15:20:26.367 回答
0

您应该在自定义视图中覆盖onSaveInstanceStateonRestoreInstanceState并执行任何必要的操作来保存内部状态。

如果您从现有的 View 类派生,那么不要忘记调用父类实现来保存实例状态。

于 2012-06-25T21:33:26.780 回答