Android: Wie erhalten wir die Daten in meiner arrayadapter / Listenansicht, wenn ändern Orientierung?
-
22-09-2019 - |
Frage
, wie oben, wird es automatisch gemacht? Meine Liste war leer, sobald die Ausrichtung chMYanges? und nein, ich brauche die Orientierungsänderung =)
Mein Adapter
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;
}
Meine 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);
Danke Jungs
Lösung
Sie können auch verwenden http://developer.android. com / reference / android / app / Activity.html # onRetainNonConfigurationInstance ()
So etwas wie dies in Ihrer Aktivität:
@Override
public Object onRetainNonConfigurationInstance() {
return this.m_adapter.getItems();
}
Und dann in Ihrem 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);
// ...
}
Andere Tipps
Wenn Sie die Daten im Speicher haben, dass der Bedarf während einer Orientierungsänderung bleiben, um, müssen Sie etwas tun, dass zu arrangieren. Die beste Lösung ist onSaveInstanceState()
zu implementieren und verwenden, um Ihre Daten zu speichern, weil das nicht nur zur Orientierung Änderungen verwendet wird, aber auch andere Situationen als auch (zB Ihre Aktivität ist auf dem aktuellen Stack, aber es muss von RAM hinausgeworfen werden Raum für Dinge später in dem Stapel freizugeben).
Ich glaube, Sie auf dem falschen Weg sind. Bitte nehmen Sie sich etwas Zeit, das Video von Android-Entwickler, um zu sehen: http://www.youtube.com/watch ? v = wDBM6wVEO70 (ca. 1 Stunde).
Ich folgte das Video, und meine Listenansicht funktioniert gut, wenn die Bildschirmausrichtung ändert: -)
Ich löste dieses Problem mit OnSaveInstanceState()
und 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
ist Halt in ArrayAdapter arrayAdapter = new ArrayAdapter<String>(this ,R.layout.item,name_array);
Wenn Sie nun von Quer- auf Hochformat wechseln und umgekehrt, die Daten nicht los
Die Daten sollten nicht verloren gehen, wenn Sie die Ausrichtung ändern. Das einzige, was ich mir vorstellen kann ist, dass das Layout für Ihre Tätigkeit nicht korrekt ist, wie, Kontrollen des sichtbaren Bereichs bewegen sich auf die Ausrichtung zu ändern.
Bitte setzen Sie diesen Code in Ihrer AndroidManifest.xml
Datei.
activity
android:name="MainActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation|screenSize"