Я новичок в Android (это мое первое приложение), и я сделал GridView
в Activity
, который я бы хотел, чтобы он был отзывчивым в зависимости от положения экрана (портрет/пейзаж). Конечно, я сделал некоторые пользовательские значения макета GridView
ширины строк как для портрета, так и для пейзажа, и он отлично работает. За исключением того, что при каждом изменении ориентации экрана снова загружается GridView
. И это плохо для пользователей. Мне нравится только GridView
(и, безусловно, его строки), чтобы настроить на новую ширину экрана, не выполняя все инструкции onCreate()
(получение GridView
данных из Интернета, назначение устаревших данных в объекте HashMap
, установка GridView
Adapter
, а затем отображение GridView
). Я прошел через многие темы форума и некоторую документацию Google, в которой говорится о восстановлении простых значений, но так и не нашел ответа на восстановление GridView
без повторной перезагрузки. Я читал около onSaveInstanceState()
и onRestoreInstanceState()
, но я не знал, как их использовать в моем случае (GridView
case).Восстановить Android GridView после изменения ориентации экрана (без перезагрузки)
Может ли кто-нибудь предоставить простой пример кода для этого? Или, по крайней мере, некоторые заголовки?
Вот некоторые из того, что я пытался в моем коде, в Activity
классе:
private Parcelable mListInstanceState;
private Parcelable mAdapterInstanceState;
private GridView gridView = null;
private MyAdapter myAdapter = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = (GridView) findViewById(R.id.gridview);
// Check whether we're recreating a previously destroyed instance
if(savedInstanceState != null) {
// Restore value of members from saved state
mListInstanceState = savedInstanceState.getParcelable("gridview");
mAdapterInstanceState = savedInstanceState.getParcelable("adapter");
}
else {
// Retrieve data from internet, fill HashMap object,
// set Adapter and display GridView only for the first time the activity is created
attemptToDisplayGirdViewItems();
}
}
@Override
protected void onSaveInstanceState(Bundle state) {
// Save activity state
super.onSaveInstanceState(state);
state.putParcelable("gridview", gridView.onSaveInstanceState());
// state.putParcelable("adapter", myAdapter);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// Retrieve and restore activity state
// Restore state members from saved instance
mListInstanceState = savedInstanceState.getParcelable("gridview");
mAdapterInstanceState = savedInstanceState.getParcelable("adapter");
super.onRestoreInstanceState(savedInstanceState);
}
вам лучше сохранить данные (из интернета) только ... FX с использованием либо устаревший 'Activity.getLastNonConfigurationInstance()' или с UI-менее сохран фрагмент ... все остальное должно быть там ... GridView сохраняет позицию текущего элемента в 'onSaveInstanceState', поэтому вам следует беспокоиться об этом ... – Selvin
http://selvin.pl/MainActivity.java.txt проверьте класс CacheFragment и его использование ... данные, полученные из Интернета, хранятся в 'JSONArray CacheFragment.response', и он« выживает »при изменении настроек экрана ... loadData запускает новый запрос или немедленно возвращает данные, зависит от того, будет ли' response' это s et уже или нет – Selvin
Спасибо @Selvin за вашу помощь. Я попробовал решение Eugen, и он отлично сработал :) – AndroWeed