我有两个活动(activity1和activiy2),每个活动都有一个按钮。在activity1中,我有一个很少选项的微调器。假设我从这个微调器中选择选项2,我单击activity1中的按钮,然后activity2启动。当我点击后退按钮时,activity1恢复,同样的选项2可见(我需要)。现在的问题是,如果我的activity2已启动,并且我单击其中的按钮,则启动activity1。但它不是恢复以前的activity1状态,而是以刚刚创建的方式启动,并且之前的选择被更改。我怎么能得到像后退按钮一样的设施(不是回到以前的活动的设施,我的意思是自动恢复任何活动的先前状态),即使我再次开始活动。如果再次访问活动,我只需要知道如何维护活动的先前状态。
使用此代码,当点击按钮时,我会从一个活动转到另一个活动:
Intent intent=new Intent();
intent.setClassName(getApplicationContext(),"com.myapp.activityname");
startActivity(intent);
请帮助我。我是android的初学者,所以如果有人给出答案,请解释一下。在adavnce中感谢
答案 0 :(得分:11)
想想我找到了答案。让我用简单的话说出我的所作所为,
假设我有两个活动activity1和activity2,我正在从activity1导航到activity2(我已经在activity2中完成了一些工作),然后通过单击activity1中的按钮再次返回到活动1。现在在这个阶段我想回到activity2,我想在上次离开activity2时看到我的activity2处于相同状态。
对于上面的场景,我所做的是在清单中我做了一些像这样的改动:
<activity android:name=".activity2"
android:alwaysRetainTaskState="true"
android:launchMode="singleInstance">
</activity>
在按钮点击事件的activity1中我做了这样的事情:
Intent intent=new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
intent.setClassName(this,"com.mainscreen.activity2");
startActivity(intent);
并且在按钮点击事件的activity2中,我这样做了:
Intent intent=new Intent();
intent.setClassName(this,"com.mainscreen.activity1");
startActivity(intent);
现在将会发生的事情是,我们在activity2中所做的任何更改都不会丢失,我们可以在与之前离开的状态相同的状态下查看activity2。
我相信这是答案,这对我来说很好。
答案 1 :(得分:3)
通过覆盖Activity的onSaveInstanceState
事件处理程序,您可以使用其Bundle参数来保存实例值。这是一个例子:
@Override
public void onSaveInstanceState(Bundle outState) {
// Retrieve the View
TextView myTextView = (TextView)findViewById(R.id.myTextView);
// Save its state
outState.putString("My text",
myTextView.getText().toString());
super.onSaveInstanceState(outState);
}
如果在会话期间强制重新启动应用程序,则保存的Bundle将传递到onRestoreInstanceState
和onCreate
方法。然后,您可以从Bundle中提取值并使用它们来更新Activity实例状态。这是一个例子:
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
TextView myTextView = (TextView)findViewById(R.id.myTextView);
String text = “”;
if (icicle != null && icicle.containsKey("My text")) {
text = icicle.getString(TEXTVIEW_STATE_KEY);
}
myTextView.setText(text);
}
重要的是要记住,onSaveInstanceState
仅在活动变为非活动时被调用,而不是在通过调用finish
或用户按下后退按钮关闭时调用。
答案 2 :(得分:0)
下载source code或查看the entire post
对于活动一,您需要使用startActivityForResult()函数,该函数将值返回给父活动,即活动一。
Intent intent = new Intent(MainActivity.this, Activity2.class);
startActivityForResult(intent, 1);
要从活动2接收值而不更改活动1,请添加以下代码
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if(resultCode == RESULT_OK){
String text=data.getStringExtra("text");
vTxt.setText("Name 1: "+eTxt.getText()+ "\n Name 2: "+text);
}
}
}
活动2
添加以下代码以返回活动1并传递一些值
Intent intent=new Intent(Activity2.this, MainActivity.class);
Bundle extra=new Bundle();
extra.putString("text", eTxt.getText().toString());
intent.putExtras(extra);
setResult(RESULT_OK, intent);
finish();
最后你完成了