Ответ 1
Я новичок в разработке приложений для Android и не могу понять, что на самом деле это делает для нас. Может ли кто-нибудь объяснить это мне?
Своими словами вы можете сделать это как MAP
, где хранятся примитивные типы данных и объекты как пара key-value
Bundle
чаще всего используется для передачи данных через различные Activities
. Предоставляет методы putType()
и getType()
для хранения и извлечения данных из него.
Также Bundle
как параметр onCreate()
Метод жизненного цикла активности может использоваться, когда вы хотите сохранить данные при изменении ориентации устройства (в этом случае активность уничтожается и создается снова с ненулевым параметром как Bundle).
Подробнее о Bundle
по его методам вы можете прочитать reference at developer.android.com
, где вы должны начать, а затем сделать некоторые демо-приложения для получения опыта.
Демонстрационные примеры использования:
Передача примитивных типов данных через действия:
Intent i = new Intent(ActivityContext, TargetActivity.class);
Bundle dataMap = new Bundle();
dataMap.putString("key", "value");
dataMap.putInt("key", 1);
i.putExtras(dataMap);
startActivity(i);
Передача Список значений через действия:
Bundle dataMap = new Bundle();
ArrayList<String> s = new ArrayList<String>();
s.add("Hello");
dataMap.putStringArrayList("key", s); // also Integer and CharSequence
i.putExtras(dataMap);
startActivity(i);
Передача сериализованных объектов через действия:
public class Foo implements Serializable {
private static final long serialVersionUID = 1L;
private ArrayList<FooObject> foos;
public Foo(ArrayList<FooObject> foos) {
this.foos = foos;
}
public ArrayList<FooObject> getFoos() {
return this.foos;
}
}
public class FooObject implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
public FooObject(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
Тогда:
Bundle dataMap = new Bundle();
ArrayList<FooObject> foos = new ArrayList<FooObject>();
foos.add(new FooObject(1));
dataMap.putSerializable("key", new Foo(foos));
Пройти Parcelable objects через Activities:
Существует гораздо больше кода, поэтому вот статья, как это сделать:
Как получить данные в целевом режиме:
Существует один магический метод: getIntent()
, который возвращает Intent (если есть данные и с расширенными данными), которые начали Activity, откуда вызывается метод.
Итак:
Bundle dataFromIntent = getIntent().getExtras();
if (dataFromIntent != null) {
String stringValue = dataFromIntent.getString("key");
int intValue = dataFromIntent.getInt("key");
Foo fooObject = (Foo) dataFromIntent.getSerializable("key");
// getSerializble returns Serializable so we need to cast to appropriate object.
ArrayList<String> stringArray = dataFromIntent.getStringArrayList("key");
}
Использование Bundle в качестве параметра метода onCreate()
:
Вы сохраняете данные в onSaveInstanceState()
, как показано ниже:
@Override
public void onSaveInstanceState(Bundle map) {
map.putString("key", "value");
map.putInt("key", 1);
}
И восстановите их в onCreate()
(в этом случае Bundle
как параметр не равен нулю), как показано ниже:
@Override
public void onCreate(Bundle savedInstanceState) {
if (savedInstanceState != null) {
String stringValue = savedInstanceState.getString("key");
int intValue = savedInstanceState.getString("key");
}
...
}
Примечание. Вы можете восстановить данные также в onRestoreInstanceState()
, но это не часто (его вызывается после onStart()
и onCreate()
вызывается раньше).