0

画面の向きを変更した後、動的に追加されたビューで奇妙な動作が発生しました。ここで何か助けていただければ幸いです...

アクティビティの基本レイアウトがあります。これは、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 には正しい子が含まれます。これは非常に奇妙です...

4

1 に答える 1

0

画面の回転は、画面全体を新しい向きで再描画します。構成の変更をオーバーライドすることでこれを防ぐことができます。

Android マニフェストの画面宣言の下に 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 に答える