画面の向きを変更した後、動的に追加されたビューで奇妙な動作が発生しました。ここで何か助けていただければ幸いです...
アクティビティの基本レイアウトがあります。これは、ScrollView と backButton を含む LinearLayout です。
<LinearLayout
...>
<ScrollView
android:id="@+id/scrollView_containerForDynamicallyAddedLinearLayouts"
...>
</ScrollView>
<Button
android:id="@+id/backButton"
android:onClick="onClick"
.../>
</LinearLayout>
私のアクティビティでは、多くの 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) の場合にデバッガー ブレークポイントが設定されています。 of scrollViewContainer は、すべての子が null であることを示しています (これは間違っています)。しかし、backButton をクリックすると、scrollViewContainer には正しい子が含まれます。これは非常に奇妙です...