0

私はアンドロイドの初心者です。私は簡単なコードを持っています.1番目のアクティビティから1つのアクティビティを呼び出しています.2番目のアクティビティには、2番目のアクティビティが終了して最初のアクティビティが表示されるボタンがあります. 最初のアクティビティで onSaveInstanceState を実行する方法はありますか。マニフェスト ファイルを編集する必要はありますか?

以下は私のコードです

 public class Activity1 extends Activity {
  /** Called when the activity is first created. */

 TextView mTextView ;

 Button b1;
 static int count=0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);



    mTextView = (TextView) findViewById(R.id.textView2);

    if (savedInstanceState == null) {
        mTextView.setText("Welcome to HelloAndroid!");
    } else {
        mTextView.setText("Welcome Back!");
        System.out.println("count------>"+ count);
    }



    final Intent i = new Intent(this,activity2.class);
    b1 = (Button) findViewById(R.id.button1);
    b1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            startActivity(i);
            finish();
        }
    });

}


@Override
public void onResume() 
{
    super.onResume();
    System.out.println("inside Resume");
 }

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

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
      super.onSaveInstanceState(savedInstanceState);

      savedInstanceState.putBoolean("MyBoolean", true);
      savedInstanceState.putDouble("myDouble", 1.9);
      savedInstanceState.putInt("MyInt", 1);
      savedInstanceState.putString("MyString", "Welcome back to Android");
      count++;
    }


    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
      super.onRestoreInstanceState(savedInstanceState);

      boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
      double myDouble = savedInstanceState.getDouble("myDouble");

      System.out.println("MyBoolean"+ myBoolean);
      System.out.println("myDouble"+ myDouble);
    }


}

そして、これが私の2番目のアクティビティで、1番目のアクティビティによって呼び出されます

public class activity2 extends Activity{

TextView textview;
Button b1;
 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);

        textview = (TextView) findViewById(R.id.textView1);

        textview.setText("in activity2");

             final Intent i = new Intent(this,Activity1.class);

        b1 = (Button) findViewById(R.id.button1);

        b1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                startActivity(i);           
                finish();
            }
        });
 }
}

誰か助けてくださいありがとう!

4

2 に答える 2

1

あなたが探しているのは OnActivityResult だと思います

このようにアクティビティ 1 で onActivityResult をオーバーライドします

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       //Call methods here that you want to execute when your activity is returned to
}

次に、アクティビティ 1 で、アクティビティ 1 の開始方法を次のように変更します。

    startActivityForResult(i, 0)

アクティビティ 2 からアクティビティ 1 に情報を戻したい場合は、アクティビティ 2 でバンドルを作成し、finish() を呼び出す前に setResult() で設定できます。

    Intent resultIntent = new Intent();
    //put data in resultIntent
    setResult(RESULT_OK, resultIntent);
    finish()

また、アクティビティ 2 では、finish を呼び出す前に startActivity() を使用してアクティビティ 1 を直接開始する必要はありません。finish() を呼び出すと、元のアクティビティに自動的に戻ります。startActivity を呼び出すと、実際にはナビゲーション スタックに新しいアクティビティ 1 が作成されます。これは、元のアクティビティ 1 とそのすべてのデータから完全に独立しています。

編集:

申し訳ありませんが、これまで気付かなかったのですが、2 つ目のアクティビティを開始するときに、最初のアクティビティで finish() を呼び出さないようにしてください。これを行うと、アクティビティが完全に閉じられ、アクティビティに含まれていたすべてのデータ (savedInstanceState を含む) が失われます。その行を削除すると、これは期待どおりに機能します。

さらに、Android が自動的にバックスタックを形成できるようにするため、電話の [戻る] ボタンを押すと、ボタンを手動で作成する代わりに、呼び出しアクティビティの軌跡が自動的に上がります。

于 2012-09-26T16:56:06.150 に答える
0

誰かが同様の問題を抱えている別の投稿を見つけました。onSaveInstanceState メソッドをオーバーライドする必要があります。

Save Instance State を使用して Android アクティビティの状態を保存する

それが役立つことを願っています。

于 2012-09-26T06:46:31.970 に答える