Как сохранить программно созданные элементы при повороте экрана?
Друзья, доброго времени суток! Подскажите пожалуйста как сохранить программно созданные элементы при повороте экрана? Знаю как с помощь onSaveInstanceState и onRestoreInstanceState сохранять данные, но как положить объект в пакет я не знаю, буду благодарен за любой развернутый ответ, Спасибо! Ниже код приложения:
public class MainActivity extends AppCompatActivity {
Button button1;
LinearLayout container;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button) findViewById(R.id.button1);
container = (LinearLayout) findViewById(R.id.ll1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
LayoutInflater li1 = getLayoutInflater();
View it1 = li1.inflate(R.layout.row, container, false);
container.addView(it1);
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
}
Ответы (2 шт):
Чтобы положить объект в бандл, нужно наследовать его (объект) от Serializable или Parcelable. Или ложить только данные из этого объекта и после уже восстанавливать всё, создавая новый объект и заполняя его восстановленными данными.
Класть тяжёлые объекты в бандлы не самая лучшая идея.
Размер бандла органичен (1мб было раньше, возможно сейчас уже больше).
И это является плохой практикой. Лучшим решением является либо сохранение данных в какой-то другой сущности, а бандл класть к примеру его id для того чтоб после поворота снова это вытянуть.
Это может быть сохранение в базу данных. Либо это может быть какая-то сущность которая не умирает вместе с вашей View, например Presenter или ViewModel.
Если же вы все же хотите положить в бандл то лучше отдавать предпочтение Parcelable перед Serialaizeble. Так как парселизация проходит быстрее и не использует рефлексию.