Android - 更改屏幕方向后删除和添加视图无效?

时间:2013-01-13 13:19:20

标签: android screen-orientation viewgroup

我在屏幕方向更改后经历了动态添加视图的一些奇怪行为。我真的很感激这里的一些帮助...

我的活动有一个基本布局,它是一个包含ScrollView和backButton的LinearLayout。

<LinearLayout
  ...>
  <ScrollView
    android:id="@+id/scrollView_containerForDynamicallyAddedLinearLayouts"
    ...>
  </ScrollView>
  <Button
    android:id="@+id/backButton"
    android:onClick="onClick"
    .../>
</LinearLayout>

在我的Activity中,我动态创建了很多LinearLayouts,它们还包含某种导航按钮,可以在LinearLayouts之间切换。这些LinearLayouts存储在ArrayList(panelViewList)中,并在运行时从ScrollView中添加和删除(取决于单击了哪个导航按钮)。 backButton只是从ScrollView中删除所有视图。

public void onClick(View view) {
  if (view.getId() == R.id.backButton) {
    scrollViewContainer.removeAllViews();
  } else {
    String target = ((Button) view).getText().toString();
    scrollViewContainer.removeAllViews();
    for (LinearLayout ll : panelViewList) {                           
      if (ll.getContentDescription().toString().equals(target)) {     
        xmlVerticalScrollView.addView(ll);                            
        break;                                                        
      }
  }
}

这个工作非常好没有任何问题直到屏幕方向改变了。屏幕方向更改后,单击动态添加的LinearLayouts中的导航按钮(没有删除视图,没有添加目标视图)时,不会发生任何事情。但是单击backButton仍然可以正常工作(所有视图都将被删除)。为什么呢?

另外信息:我为单击后退按钮的情况设置了调试器断点,并点击了导航按钮的(else)情况: 方向更改后,当我单击动态创建的LinearLayout中的导航按钮时,scrollViewContainer的检查表明所有子项都为null(这是错误的)。但是,当我点击backButton时,scrollViewContainer具有正确的子项。这很奇怪......

1 个答案:

答案 0 :(得分:0)

屏幕旋转将以新方向重新绘制整个屏幕,我们可以通过覆盖配置更改来阻止它。

在Android Manifest中的屏幕声明下添加android:configChanges =“orientation | screenSize”

android:configChanges="orientation|screenSize"

并在您的活动中覆盖onConfigurationChanged(配置),如

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}