0

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

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

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

在我的 Activity 中,我动态地创建了很多 LinearLayouts,它们还包含一些用于在 LinearLayouts 之间切换的导航按钮。这些 LinearLayout 存储在 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 中的导航按钮时不会发生任何事情(不删除视图,不添加目标视图)。但是单击后退按钮仍然可以正常工作(所有视图都将被删除)。为什么?

附加信息:我为单击后退按钮的情况和单击导航按钮的(其他)情况设置了调试器断点:方向更改后,当我单击动态创建的 LinearLayout 中的导航按钮时,检查scrollViewContainer 说所有的孩子都是空的(这是错误的)。但是当我点击后退按钮时,scrollViewContainer 有正确的孩子。这很奇怪……

4

1 回答 1

0

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

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

android:configChanges="orientation|screenSize"

并在您的活动中覆盖 onConfigurationChanged(Configuration) ,例如

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}
于 2013-01-13T13:25:00.563 回答