Ответ 1
Я думаю, что лучший и более чистый способ сделать это - инициализировать следующий Intent
с помощью полученного Intent
через Intent(Intent)
конструктор.
Intent newIntent = new Intent(receivedIntent);
У меня много операций, связанных вместе с Intents, а некоторые намерения требуют параметров, передаваемых в комплекте Bundle. Когда мне приходится пересылать параметры через несколько Деяний, следует ли я копировать каждый из них явно или есть лучший способ сделать это? Например, я мог бы клонировать копию текущего Intent в качестве отправной точки для вызова других подзадачных намерений, и это (предположительно) скопировало бы все предыдущие параметры Bundle.
В качестве иллюстрации скажем, что у вас есть проводник файлов. Активность, которая находится в одном из двух режимов: Expert и Novice. Вы хотите передать это состояние в какую-либо подзадачную активность, такую как страница свойств файла, которую вы могли бы сделать, вызвав putExtra ( "skillLevel", "Expert" ) в Intent перед ее запуском. Теперь, если на странице свойств также есть подзадача Activity, например, параметры сжатия, как вы должны пересылать параметр "skillLevel"?
Я думаю, что лучший и более чистый способ сделать это - инициализировать следующий Intent
с помощью полученного Intent
через Intent(Intent)
конструктор.
Intent newIntent = new Intent(receivedIntent);
Я не знаю, почему вы хотите скопировать все остальные свойства с помощью конструктора.
intent.putExtras(oldIntent);
Должен сделать трюк. Обратите внимание, что intent
- это вновь созданный экземпляр!
Если параметр является системным, пока он не будет изменен (например, сложность игры), может быть проще описать его в общих предпочтениях. Это будет иметь побочный эффект запоминания сложности, установленной при выходе пользователя из приложения.
Так как у нас нет глобальных переменных в 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;
}
}
когда вы хотите получить его в режиме "Только вызов"
Object objectSingleton = Object.getInstance();