0

我是android的初学者。我有一个简单的代码,我从我的第一个活动中调用一个活动,在第二个活动中我有一个按钮,按下该按钮第二个活动完成并且第一个活动出现。有没有办法在第一个活动中执行 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);
    }


}

这是我的第二个活动,由第一个活动调用

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 中,您无需在调用完成之前使用 startActivity() 再次直接启动活动 1。在您调用 finish() 后,它会自动将您返回到您来自的活动。如果您调用 startActivity 它实际上会在导航堆栈上创建一个新的活动 1,它将完全独立于原始活动 1 及其所有数据。

编辑:

抱歉,我之前没有注意到这一点,但请确保在开始第二个活动时不要在第一个活动中调用 finish()。如果这样做,它将完全关闭活动,并且您将丢失其中的所有数据(包括 savedInstanceState)。如果你把那条线去掉,这将按预期工作。

此外,它会让android自动为你形成一个backstack,所以点击手机上的后退按钮会自动跟踪你的调用活动,而不是让你手动创建按钮来这样做。

于 2012-09-26T16:56:06.150 回答
0

发现另一个帖子有人有类似的问题。您需要覆盖 onSaveInstanceState 方法:

使用 Save Instance State 保存 Android Activity 状态

希望有帮助。

于 2012-09-26T06:46:31.970 回答