Android: come faccio a conservare i dati nel mio arrayadapter / ListView quando il cambiamento di orientamento?
-
22-09-2019 - |
Domanda
come sopra, si fa automaticamente? La mia lista era vuota una volta che i chMYanges di orientamento? e no, ho bisogno del cambiamento dell'orientamento =)
Il mio adattatore
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;
}
Il mio onCreate
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);
grazie ragazzi
Soluzione
È inoltre possibile utilizzare http://developer.android. com / riferimento / android / app / Activity.html # onRetainNonConfigurationInstance ()
Qualcosa di simile nella vostra attività:
@Override
public Object onRetainNonConfigurationInstance() {
return this.m_adapter.getItems();
}
E poi nel vostro 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);
// ...
}
Altri suggerimenti
Se si dispone di dati in memoria che ha bisogno di restare durante un cambio di orientamento, è necessario fare qualcosa per organizzare questo. La soluzione migliore è quella di implementare onSaveInstanceState()
e usarlo per memorizzare i dati, perché si abitua non solo per le modifiche di orientamento, ma altre situazioni, nonché (per esempio, la vostra attività è in pila corrente, ma ha bisogno di ottenere buttato fuori di RAM per liberare spazio per le cose più tardi nella pila).
Credo che tu sia sulla strada sbagliata. Si prega di richiedere un certo tempo per vedere questo video da parte degli sviluppatori di Android: http://www.youtube.com/watch ? v = wDBM6wVEO70 (circa 1 ora).
Ho seguito il video, e la mia vista elenco funziona bene quando schermo cambia orientamento: -)
Ho risolto questo problema utilizzando OnSaveInstanceState()
e 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
è attesa in ArrayAdapter arrayAdapter = new ArrayAdapter<String>(this ,R.layout.item,name_array);
Ora, quando si passa da orizzontale a verticale e invertire, i dati sono los
I dati non devono essere persi quando si modifica l'orientamento. L'unica cosa che posso immaginare è che il layout per la vostra attività non è corretto, come, i controlli si spostano fuori della zona visibile sul cambiare l'orientamento.
Si prega di inserire questo codice nel file AndroidManifest.xml
.
activity
android:name="MainActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation|screenSize"