Как записать новый Intent в onNewIntent ()? - PullRequest
39 голосов
/ 25 января 2011

Я хочу передать новый, но другой, Намерение в Деятельности.Как вы различаете новое намерение и предыдущее намерение?Какой код входит в onNewIntent ()?Пример будет очень полезным.

Ответы [ 5 ]

81 голосов
/ 25 января 2011

Новое намерение является частью onNewIntent(Intent). Оригинал Intent по-прежнему доступен через getIntent().

Вы помещаете любой код, который вам нужен, в onNewIntent, чтобы обновить интерфейс с новыми параметрами; вероятно, похоже на то, что вы делаете в onCreate.

Кроме того, вы, вероятно, захотите позвонить setIntent(intent) в onNewIntent, чтобы убедиться, что будущие вызовы getIntent() в жизненном цикле Activity получат самые последние данные Intent.

22 голосов
/ 28 апреля 2011

То, как намерение приходит к вашей деятельности, зависит от launchMode (см. Документацию launchmode в http://developer.android.com/guide/topics/manifest/activity-element.html#lmode).

  • Для режима запуска "стандартный" (по умолчанию) startActivity с новым намерением приведет к onCreate с этим намерением для нового экземпляра действия.

  • Для режимов запуска "singleTop" и "singleTask" startActivity с новым намерением приведет либо к

a) onCreate с этим намерением для нового экземпляра действия (если это действие не выполнялось) [согласно «стандарту» выше] или b) onNewIntent с этим намерением к существующему действию (если это действие уже выполнялось).

Для b) второе намерение доступно в параметрах onNewIntent. Что вы делаете с этим, зависит от вашего приложения. Некоторые приложения просто игнорируют это, в то время как другие выполняют setIntent () и начинают реинициализацию / обновление, обрабатывая новое намерение.

13 голосов
/ 17 августа 2012

Ваша вызываемая деятельность - основная деятельность

public class MainActivity extends Activity
{
    public void onCreate(Bundle SavedInstanceState)
    {
    }

    @Override
    protected void onNewIntent(Intent intent) 
    {
        super.onNewIntent(intent);
        if(intent.getStringExtra("methodName").equals("myMethod"))
        {
            myMethod();
        }
    }

    public void myMethod()
    {
    }
}

Ваша деятельность по вызову

Код переходит к предыдущему намерению

public class CallingActivity extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        Intent i=new Intent(this,MainActivity.class);
        i.putExtra("methodName","myMethod");//goes to previous INtent
        startActivity(i);//will trigger only myMethod in MainActivity
    }
}

Ваша деятельность по вызову

Код запускает новую операцию с использованием такого рода намерений

public class CallingActivity extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        Intent i=new Intent(this,MainActivity.class);
        startActivity(i);//will trigger New Activity i.e. MainActivity
    }
}
3 голосов
/ 22 декабря 2011

Есть ошибка, связанная с этим: http://code.google.com/p/android/issues/detail?id=17137

0 голосов
/ 21 января 2014

Если вы не хотите, чтобы ваша деятельность повторно использовала новое намерение в каждом последующем onResume(), я бы рекомендовал хранить намерение в поле экземпляра, а не через setIntent(intent).

Таким образомвы можете сбросить это поле экземпляра на ноль, как только вы израсходовали намерение, не выбрасывая исходное намерение запуска.

Более подробно в моем ответе здесь: https://stackoverflow.com/a/21261404/621690

setIntent(Intent) было описанокак ошибка инженера Android Framework: https://groups.google.com/forum/#!topic/android-developers/vrLdM5mKeoY

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...