Подтвердить что ты не робот

Соотношение интенции и связности

При использовании объекта Intent мы можем напрямую использовать различные типы данных, используя putExtra(). Мы также можем поместить эти дополнительные данные в объект Bundle и добавить его в Intent. Итак, зачем нам Bundle, если мы можем сделать это напрямую с помощью Intent?

4b9b3361

Ответ 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));
}