如何根据调用的Intent恢复同一Activity中的内容?

时间:2010-05-18 15:04:34

标签: android android-activity android-intent restore

这是我的场景:我通过AppWidget启动了一个Activity A. AppWidget显示(除其他外)3个按钮。他们每个人都有自己的意图。它们旨在通过名为AppWidgetReceiver的类向Activity提供信息。在后者我创建这样的意图:

Intent i = new Intent(context, CreateNoteActivity.class);  
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
i.putExtra(AppWidget.WIDGET_ITS_TRIGGER_ID, trigger_id);  
i.putExtra(AppWidget.WIDGET_TITLE, title);  
i.putExtra(AppWidget.WIDGET_DESCRIPTION, descr);  
context.startActivity(i);

这会启动活动A.基于trigger_idtitledescr我为用户创建了某种信息菜单:

coreQuestionTitle   = getIntent().getStringExtra(AppWidget.WIDGET_TITLE);  
coreQuestionDescr   = getIntent().getStringExtra(AppWidget.WIDGET_DESCRIPTION);  
coreQuestionId      = getIntent().getIntExtra(AppWidget.WIDGET_ITS_TRIGGER_ID, -1); 
TextView tvCoreQuestion = (TextView) findViewById(R.id.create_note_core_question_text);
tvCoreQuestion.setText(coreQuestionTitle);

所有这一切都很好。当我没有通过this.finish()“关闭”活动时出现问题,例如按下主页或后退按钮。当我现在单击AppWidget上的OTHER按钮时,先前打开的Activity将被恢复而不是重新启动。 onCreate()未被调用。相反,它会直接进入onStart()。我知道这是活动生命周期的目的,因为任务仍然存在 不幸的是,我真的需要能够检索意图中指定的参数来设置所需的信息。而且,我希望能够恢复3种不同任务中的任何一种状态。任何人都可以帮我解决这个问题吗?

顺便说一下:我通过使用android:configChanges =“keyboardHidden | orientation”和onCreate()来避免传递onConfigurationChanged()。 Manifest.xml中的Activity声明如下所示:

<activity android:name=".notes.CreateNoteActivity"  
    android:configChanges="keyboardHidden|orientation"  
    android:label="@string/create_note"  
    android:launchMode="singleTask"  
    android:theme="@android:style/Theme.NoTitleBar" >  
    <intent-filter>  
        <category android:name="android.intent.category.CATEGORY_HOME" />  
    </intent-filter>  
</activity>

提前致谢,
Steff

1 个答案:

答案 0 :(得分:1)

如何在this.finish()onStop()方法上专门杀死活动(通过致电onPause())?当用户点击窗口小部件的不同按钮时,这可能会产生额外的开销,但这是您可以强制每次点击调用onCreate()的唯一方法。