Как мне передать параметры Intent через цепочки действий? - PullRequest
32 голосов
/ 29 декабря 2011

У меня есть множество Активностей, соединенных вместе с Intents, и для некоторых Intents требуются параметры, передаваемые в Связке дополнений.Должен ли я копировать каждое из них в явном виде или есть лучший способ сделать это, когда мне нужно переслать параметры через несколько операций?Например, я мог бы клонировать-скопировать текущее намерение в качестве отправной точки для вызова других намерений подзадачи, и это (предположительно) скопировало бы все предыдущие параметры пакета.

В качестве иллюстрации, скажем, у вас есть файловый менеджерэто в одном из двух режимов: эксперт и начинающий.Вы хотите передать это состояние некоторой подзадаче Activity, такой как страница свойств файла, которую вы можете сделать, вызвав putExtra ("skillLevel", "Expert") в Intent перед тем, как запустить его.Теперь, если на странице свойств также есть подзадача «Деятельность», например, параметры сжатия, как следует пересылать параметр «skillLevel»?

Ответы [ 4 ]

70 голосов
/ 16 октября 2012

Я не знаю, почему вы захотите скопировать все остальные свойства, используя конструктор.

intent.putExtras(oldIntent);

Должен сделать свое дело. Обратите внимание, что intent это недавно созданный экземпляр!

25 голосов
/ 29 декабря 2011

Я думаю, что лучший и более чистый способ сделать это - инициализировать следующий Intent, используя полученный Intent через Intent(Intent) конструктор.

Intent newIntent = new Intent(receivedIntent);
2 голосов
/ 29 декабря 2011

Если параметр является общесистемным, до его изменения (например, сложности игры) его проще описать в общих настройках. Побочным эффектом будет запоминание установленной сложности, когда пользователь покидает приложение.

0 голосов
/ 15 декабря 2012

Поскольку у нас нет глобальных переменных в Android, вы можете создать класс с информацией вашего приложения и использовать шаблон Singleton.Поскольку он будет изменен для всей системы, таким образом, вы всегда можете получить один и тот же экземпляр этого объекта, следовательно, всегда одну и ту же информацию.

Пример:

public class Object {

private static Object instance;

private Object objectcall;  

private Object(){

}

public void setObject(Object newObject){
    this.objectcall = newObject;

} 


public  Object getObject(){
    return this.objectcall;
}


public static synchronized Object getInstance(){

         if(instance==null){    
           instance=new Object();
         }
         return instance;

}
}

, когда вы хотитечтобы найти его в Activity, просто позвоните

Object objectSingleton = Object.getInstance();
...