0

私は自分の活動について 25 以上edittextsの見解を持っています。とで異なるmain.xmlファイルを作成したので、それぞれのUIは切り替えられたモード(または)に従って表示されます。layoutlayout-land

しかし、 に値を入力した後、ポートレートからランドスケープedittextsに変更すると、以前の値は失われます。したがって、他のモードに変更した後でも、から値を取得し、それぞれの値を復元する方法は疑問です。edittextsedittexts

もちろん、モードを切り替えるとアクティビティが再作成され、データが失われることはわかっています。開発者ガイドでも修正Handling Runtime changesしましたが、オブジェクトを返すときにデータを保存する方法など、初心者として明確に理解できませんonRetainNonConfigurationInstance()が、私のアプリでは、切り替え後もedittextsそれぞれに入力された数字が必要です.edittexts

リンクなどの多くの質問をスタックオーバーフローでも参照しましたが、問題の解決策が見つかりません。これに対する解決策を提案してください。

私にも別の問題があります。dialogこれが最初に開始されたときにポップアップするがあり、モードを切り替えるactivityときにこれも表示したくありません。この二つの解決策を教えてください。より明確にするためにコードスニペットが必要な場合は、お知らせください。コードで質問を編集します。popup

4

2 に答える 2

1

データが少ない場合は、保存して取得できますonSavedInstanceState..onRestoreInstanceState詳細については、このリンクを参照してくださいデータの保存

ただし、大きなデータがある場合は、方向の変更を許可しないでください。マニフェスト ファイルに以下の行を追加することで制限できます。

android:configChanges="orientation|keyboardHidden"

上記の行は向きを修正しますが、この場合layout-landは機能しませんが、onConfigurationChanged()メソッド内でビューを動的に処理または再配置できます

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

    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        align_landscape(); // align your view dynamically here for landscape
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        align_portrait(); // align your view dynamically here for portrait
    }
}
于 2012-09-10T12:07:56.443 に答える
0

向きが変わったときに編集テキスト値を保存し、新しいレイアウトに切り替えて、保存した値を割り当てることができます。

マニフェストに以下の条件を指定することで、向きの変化を検出できます。

android:configChanges="orientation"

onConfigurationChanged() メソッドで、さまざまなフィールドの値を保存してsetRequestedOrientation(int requestedOrientation)から、カスタム レイアウトに更新するメソッドを使用して方向を変更し、フィールドの値を復元できます。

于 2012-09-10T10:43:55.837 に答える