Как восстановить содержимое в той же активности на основе вызывающего намерения? - PullRequest
1 голос
/ 18 мая 2010

вот мой сценарий: я запускаю действие А через AppWidget.AppWidget отображает (среди прочего) 3 кнопки.У каждого из них есть свое намерение.Они предназначены для предоставления информации в Activity через класс AppWidgetReceiver.В последнем случае я создаю намерение, подобное этому:

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);

Это запускает действие А. На основе trigger_id, title и descr я создаю какое-то информационное меню для пользователя:

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, ранее открытая активность восстанавливается, а не перезапускается.onCreate() не называется.Вместо этого он прыгает прямо в onStart().Я знаю, что это предусмотрено жизненным циклом Activity, поскольку задача еще жива.
К сожалению, мне действительно нужно иметь возможность получить параметры, указанные в намерении, для установки желаемой информации.Кроме того, я хотел бы иметь возможность восстановить состояние ЛЮБОЙ из 3 различных задач.Кто-нибудь может мне помочь в этом?

Кстати: я избегаю пропустить onCreate(), используя android: configChanges = "keyboardHidden | ориентация" и onConfigurationChanged().Объявление действия в файле Manifest.xml выглядит следующим образом:

<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 Ответ

1 голос
/ 18 мая 2010

Как насчет того, чтобы конкретно убить действие (путем вызова this.finish()) в ваших onStop() или onPause() методах? Это может создать дополнительные издержки, так как пользователи нажимают на разные кнопки вашего виджета, но это единственный способ заставить onCreate() вызываться при каждом нажатии.

...