我是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();
}
});
}
}
有人请帮助我 谢谢!
答案 0 :(得分: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自动为你做一个后台堆叠,所以点击手机上的后退按钮会自动跟踪调用活动,而不是让你手动创建按钮。
答案 1 :(得分:0)
发现另一个帖子,其中有人有类似的问题。您需要覆盖onSaveInstanceState方法:
Saving Android Activity state using Save Instance State
希望有所帮助。