我在屏幕方向更改后经历了动态添加视图的一些奇怪行为。我真的很感激这里的一些帮助...
我的活动有一个基本布局,它是一个包含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具有正确的子项。这很奇怪......
答案 0 :(得分:0)
屏幕旋转将以新方向重新绘制整个屏幕,我们可以通过覆盖配置更改来阻止它。
在Android Manifest中的屏幕声明下添加android:configChanges =“orientation | screenSize”
android:configChanges="orientation|screenSize"
并在您的活动中覆盖onConfigurationChanged(配置),如
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}