Соотношение интенции и связности
При использовании объекта Intent мы можем напрямую использовать различные типы данных, используя putExtra()
. Мы также можем поместить эти дополнительные данные в объект Bundle
и добавить его в Intent
. Итак, зачем нам Bundle
, если мы можем сделать это напрямую с помощью Intent
?
Ответы
Ответ 1
Иногда вам нужно передать только few variables
или values
в другой Activity
, но что, если у вас есть bunch of variable or values
, который вам нужно передать в различные Activities
. В этом случае вы можете использовать Bundle
и с легкостью передать Bundle
на требуемый Activity
. Вместо передачи каждой переменной каждый раз.
Ответ 2
Как вы можете видеть, Intent
внутренне сохраняет его в Bundle
.
public Intent putExtra(String name, String value) {
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putString(name, value);
return this;
}
Ответ 3
Предположим, вам нужно передать Bundle
от одного Activity
к другому. Поэтому Intent
позволяет добавлять Bundle
в качестве дополнительных полей.
EDIT. Например, если вы хотите передать строку из базы данных вместе с некоторыми другими данными, очень удобно поместить эту строку в Bundle
и добавить этот Bundle
в Intent
в качестве дополнительного поля.
Ответ 4
Я предполагаю, что значение @Lalit означает, что ваша деятельность всегда передает одни и те же переменные в разных целях, вы можете сохранить их все в одном Bundle
в своем классе и просто использовать intent.putExtras(mBundle)
всякий раз, когда вам нужен тот же набор параметры.
Это упростит изменение кода, если один из параметров устареет в вашем коде, например. Как:
public class MyActivity {
private Bundle mBundle;
@Override
protected void onCreate(Bundle savedInstanceState) {
mBundle = new Bundle();
mBundle.putString("parameter1", value1);
mBundle.putString("parameter2", value2);
}
private void openFirstActivity() {
Intent intent = new Intent(this, FirstActivity.class);
intent.putExtras(mBundle);
startActivity(intent);
}
private void openSecondActivity() {
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtras(mBundle);
startActivity(intent);
}
}
OBS: Как уже говорилось, Intent
хранит параметры во внутреннем Bundle
, и стоит отметить, что при вызове putExtras
внутренний набор Intent не указывает на тот же объект, но вместо этого создает копию всех переменных, используя простой for
, как это:
for (int i=0; i<array.mSize; i++) {
put(array.keyAt(i), array.valueAt(i));
}