Android:как мне сохранить данные в моем arrayadapter / listview при изменении ориентации?
-
22-09-2019 - |
Вопрос
как и выше, делается ли это автоматически?Мой список был пуст, как только ориентация изменилась?и нет, мне нужно сменить ориентацию =)
Мой адаптер
public class ResultsAdapter extends ArrayAdapter<SearchItem> implements Filterable{
private ArrayList<SearchItem> subItems;
private ArrayList<SearchItem> allItems;// = new ArrayList<SearchItem>();
private LayoutInflater inflater;
private PTypeFilter filter;
private OnCheckedChangeListener test;
public ResultsAdapter(Context context, int textViewResourceId, ArrayList<SearchItem> items,OnCheckedChangeListener a) {
super(context, textViewResourceId, items);
//this.subItems = items;
for( int i = 0;i < items.size();i++){
subItems.add(items.get(i));
}
this.allItems = this.subItems;
inflater= LayoutInflater.from(context);
test = a;
}
Мое когда -то созданное
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView lvr = (ListView)findViewById(R.id.search_results);
// if(savedInstanceState == null){
this.m_adapter = new ResultsAdapter(home.this, R.layout.listrow, sResultsArr,home.this);
this.specsAdapter = new FeaturesExpandableAdapter(home.this,new ArrayList<String>(),new ArrayList<ArrayList<Feature>>());
// }
lvr.setAdapter(this.m_adapter);
спасибо, ребята
Решение
Вы также можете использовать http://developer.android.com/reference/android/app/Activity.html#onRetainNonConfigurationInstance ()
Что-то подобное в вашей Деятельности:
@Override
public Object onRetainNonConfigurationInstance() {
return this.m_adapter.getItems();
}
А затем в вашем onCreate():
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
// more init stuff here
sResultsArr = (ArrayList<SearchItems>)getLastNonConfigurationInstance();
if(sResultArr == null) {
sResultsArray = new ArrayList<SearchItems>(); // or some other initialization
}
self.m_adapter = new ResultsAdapter(home.this, R.layout.listrow, sResultsArr,home.this);
// ...
}
Другие советы
Если у вас есть данные в памяти, которые необходимо сохранить во время смены ориентации, вам нужно что-то сделать, чтобы упорядочить это.Лучшим решением является внедрение onSaveInstanceState()
и используйте его для хранения ваших данных, потому что это используется не только для изменения ориентации, но и в других ситуациях (например, ваша активность находится в текущем стеке, но ее нужно удалить из оперативной памяти, чтобы освободить место для более поздних операций в стеке).
Я думаю, ты на неверном пути.Пожалуйста, найдите время, чтобы посмотреть это видео от разработчиков Android: http://www.youtube.com/watch?v=wDBM6wVEO70 (около 1 часа).
Я посмотрел видео, и мой просмотр списка отлично работает, когда экран меняет ориентацию :-)
Я решил эту проблему, используя OnSaveInstanceState()
и OnRestoreInstanceState()
@Override
protected void onRestoreInstanceState(Bundle state){
super.onRestoreInstanceState(state);
name_array.addAll(state.getStringArrayList("key"));
setListAdapter(arrayAdapter);
arrayAdapter.notifyDataSetChanged();
}
@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putStringArrayList("key",name_array);
}
name_array
удерживается в ArrayAdapter arrayAdapter = new ArrayAdapter<String>(this ,R.layout.item,name_array);
Теперь, когда вы переключаетесь с альбомной ориентации на книжную и наоборот, данные не теряются
Данные не должны быть потеряны при изменении ориентации.Единственное, что я могу себе представить, это то, что макет для вашей активности неправильный, например, элементы управления перемещаются из видимой области при изменении ориентации.
Пожалуйста, поместите этот код в свой AndroidManifest.xml
файл.
activity
android:name="MainActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation|screenSize"