0

私はAndroidアプリケーションを書いています。main.xmlとnew​​.xmlの2つの重要なXMLファイルがあります。これが私のJavaアクティビティのソースコードです。

// package declarations, imports, etc

public class MainActivity extends Activity {
    @Override
    public void onCreate(savedInstanceState) {
        super.onCreate(savedInstancestate);
        setContentView(R.layout.main);
    }

    // as you can see, the content of the initial layout is found in main.xml
    // I want to change the layout so it has the content of new.xml (when I press a button)

    public void ButtonAction(View view) {
        setContentView(R.layout.new);
    }
}

つまり、次のようになります。私のmain.xmlファイルには、ボタンがあります。main.xmlファイルで指定されているように、そのボタンを押すと、メソッドButtonActionが呼び出されます。ボタンが押されてButtonActionが呼び出されたときに、レイアウトのコンテンツをnew.xmlのコンテンツに変更したいと思います。

上記のコードは機能しますが、永続的なものではありません。デバイスを回転させると、main.xmlの内容でアクティビティが更新されているように見えます。そのため、希望どおりの動作をさせることができますが、デバイスを回転させて、通常の縦向きのレイアウトではなく横向きのレイアウトで表示すると、元に戻ります。

これを修正するにはどうすればよいですか?

4

3 に答える 3

5

画面を回転すると、Activity 全体が破棄され、 での呼び出しonCreate()を含め、最初から開始されsetContentView(R.layout.main);ます。最後に選択したレイアウトを変数に保存し、代わりにこの変数を次のようにロードする必要があります。

setContentView(lastLayout);

アプリの実行中に、レイアウトの選択をオーバーライドonSaveInstanceState()onRestoreInstanceState()て覚えておく必要があります。アプリを閉じるとこの状態が失われるため、このアプローチは一時的なものです。
それ以外の場合は、SharedPreferences (またはデータベースや汎用ファイルのようなもの) を使用して、複数のセッションでレイアウトの選択を記憶できます。

于 2012-11-12T18:52:57.960 に答える
1

onSaveInstanceState() を使用してアクティビティの状態を保存し、onRestoreInstanceState() を使用してアクティビティの状態を取得します。

onRestoreInstanceState() は onStart() の後に呼び出されますが、onCreate() は onStart() の前に呼び出されます。onRestoreInstanceState() は、OS によって強制終了された後にアクティビティを再作成する場合にのみ呼び出されます。put メソッドを使用して onSaveInstanceState() に値を保存します。

protected void onSaveInstanceState(Bundle icicle) {
  super.onSaveInstanceState(icicle);
  icicle.putLong("param", value);
}

ここにチュートリアルがあり ます http://www.androidcompetencycenter.com/tag/onrestoreinstancestate/

于 2012-11-12T19:06:43.480 に答える
0

明確にするために、横向きまたは縦向きの場合、Android は最初に -land ディレクトリでレイアウト ファイルを探し、見つからない場合はデフォルトのレイアウト ディレクトリをチェックします。ファイルには次のような名前を付ける必要があり、実行時にデバイスの現在の構成に応じてシステムによって読み込まれます。

res/layout/main.xml
res/layout-land/main.xml

詳細については、リソースの提供に関するドキュメントを確認してください。

于 2012-11-12T18:57:40.897 に答える