Страница 1 из 1

метод onNewIntent

Добавлено: 28 авг 2014, 14:37
yura91
при вызове метода onNewIntent в активити происходит переход к самому вызываемому активити??

Re: метод onNewIntent

Добавлено: 28 авг 2014, 14:39
altwin

Re: метод onNewIntent

Добавлено: 28 авг 2014, 15:03
yura91
там на английском надо переводить а вообще просто интересно открывается само активити или нет?? я знаю что оно тогда процесс создания не проходит так это??

Re: метод onNewIntent

Добавлено: 28 авг 2014, 15:13
altwin
да для той у которой установлен флаг FLAG_ACTIVITY_SINGLE_TOP, когда Activity перезапускается используется уже существующий инстанс которому просто передается новый intent. Только тут всеравно getIntent() работать не будет, точнее будет но вернет оригинальный Intent. Нужно дополнительно вызывать setIntent(Intent)

Re: метод onNewIntent

Добавлено: 28 авг 2014, 16:44
yura91
то есть активити все равно появляется на экране да??

Re: метод onNewIntent

Добавлено: 28 авг 2014, 16:45
yura91
для котого вызван нью интент?? или оно непоказывается в этом момент пользователю но срабатывает??

Re: метод onNewIntent

Добавлено: 28 авг 2014, 18:35
yura91
то есть в нью интент можно передавать данные?? можете привести фрагмент кода??

Re: метод onNewIntent

Добавлено: 29 авг 2014, 10:28
altwin
yura91 писал(а):то есть активити все равно появляется на экране да??
Этот метод вызывается для активити которая итак на экране, просто с помощью него можно передать новый интент, с новыми данными.

Re: метод onNewIntent

Добавлено: 29 авг 2014, 10:29
altwin
yura91 писал(а):то есть в нью интент можно передавать данные?? можете привести фрагмент кода??
Посмотрите лучше примеры использования тут: http://android.okhelp.cz/java_android_c ... nNewIntent

Re: метод onNewIntent

Добавлено: 29 авг 2014, 14:31
yura91
а если у меня допустим есть 2 активити в таске первое было создано и второе я вызвал из первого ( то есть оба существуют).
и у первого активити есть onNewIntent и в манифесте прописан нужный атрибут я допустим вызываю первое активити по нажатию на кнопку во втором через метод startactivity. Вот в этом случае будет вызван этот метод onNewIntent в первом активити верно и первое активити не будет показано на экране(не будет перехода в него)?? и как правильно передать в этот метод строковую переменную можете привести фрагмент кода?? Может я заблуждаюсь если так обьясните в чем??

Re: метод onNewIntent

Добавлено: 29 авг 2014, 15:51
altwin
yura91 писал(а):а если у меня допустим есть 2 активити в таске первое было создано и второе я вызвал из первого ( то есть оба существуют).
и у первого активити есть onNewIntent и в манифесте прописан нужный атрибут я допустим вызываю первое активити по нажатию на кнопку во втором через метод startactivity. Вот в этом случае будет вызван этот метод onNewIntent в первом активити верно и первое активити не будет показано на экране(не будет перехода в него)?? и как правильно передать в этот метод строковую переменную можете привести фрагмент кода?? Может я заблуждаюсь если так обьясните в чем??
Дело в том, что вызвать метод этот можно только у той активити у которой установлен флаг android:launchMode="singleTop" , и если вы этот метод вызовете из другой активити то да эта станет на верх стека, т.е. будет активна. Но дело в том, что его вам вызывать не надо, он сам вызывается для этого типа активити вместо onCreate() если только не был вызван до этого onDestroy(). По поводу передачи строки, то передается она в обект Intent как и в любом другом случае, а метод onNewIntent принимает этот Intent в качестве параметра. Чтобы было проще понять считайте, что это просто метод onCreate(), который вызывается у activity помеченных, как singleTop. Разве что не стоит забывать что при передаче нового интента нужно выполнять setIntent(Intent) иначе возвращаться будет предыдущий.

Re: метод onNewIntent

Добавлено: 29 авг 2014, 16:24
yura91
то есть все происходит тоже самое как у обычных активити заисключением singleTop и вместо onCreate вызывается метод onNewIntent так это?? можете привести простенький пример кода по передачи строки в метод onNewIntent из другого активити для наглядности??

Re: метод onNewIntent

Добавлено: 29 авг 2014, 16:25
yura91
а setIntent нужно вызывать в методе onNewIntent для передачи из него данных да??

Re: метод onNewIntent

Добавлено: 29 авг 2014, 17:40
yura91
можете для наглядности написать фрагмент кода для передачи строки из одного активити в другое и так чтоб во втором использовался onNewIntent??

Re: метод onNewIntent

Добавлено: 29 авг 2014, 17:40
yura91
только java код небольшой и все??

Re: метод onNewIntent

Добавлено: 29 авг 2014, 18:06
altwin
yura91 писал(а):можете для наглядности написать фрагмент кода для передачи строки из одного активити в другое и так чтоб во втором использовался onNewIntent??
Так там писать нечего, вы просто передаете intent как обычно, и дописываете метод onNewIntent он автоматически вызовется каждый раз, когда приходит новый интент:

[syntax=java5]
/** On New Intent
*
* Called automatically when a new search string has been sent. Calls the
* fragment to display the string in a Toast.
*
* @param intent
*/
@Override
public void onNewIntent(Intent intent)
{
Log.d("Activity", "New Intent received.");

setIntent(intent);

if (Intent.ACTION_SEARCH.equals(intent.getAction()))
{
String query = intent.getStringExtra(SearchManager.QUERY);
SearchBarCompatFragment frag = (SearchBarCompatFragment)getSupportFragmentManager()
.findFragmentById(R.id.fragment_container);

frag.showSearchString(query);
}
}
[/syntax]
Но опять же тут явно он не вызывается он просто сделает activity видимой с новыми параметрами. Его можно вызвать явно из другой activity ровно также как и onCreate() но смысла в этом нет, не рекомендуется насиловать жизненный цикл activity. похоже я не так выражаюсь, этот метод нужен скорее для того, чтобы обработать получение нового интента, если активити просто возвращается из бекграунда, то вызывается метод onResume, а если пришел новый Интент то обычно вызывается onCreate() повторно, тут же activity помечается специальным флагом и в ее lifecycle по сути добавляется новый метод onNewIntent, если смотреть по графику, то прямо после onPause и перед onResume и этот метод позволяет обработать тот самый полученны Intent без повторного вызова onCreate().

Re: метод onNewIntent

Добавлено: 29 авг 2014, 20:29
yura91
SearchBarCompatFragment что это за класс??

Re: метод onNewIntent

Добавлено: 30 авг 2014, 14:06
altwin
yura91 писал(а):SearchBarCompatFragment что это за класс??
Это просто фрагмент кода, обычный класс наследующий Fragment.