2014-07-10 12 views
5

Ich probiere die neue RecyclerView in Kombination mit der Standardimplementierung der LayoutManager die LinearLayoutManager. Mein Ziel ist es, die LayoutManager meine Artikel horizontal zu zeichnen, wenn das Gerät im Hochformat ist und sie vertikal zu zeichnen, wenn das Gerät im Querformat ist. Dazu verwende ich den folgenden Code in meiner Tätigkeit des onCreate:LinearLayoutManager setOrientation nach Telefonrotation funktioniert nicht

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.nextColors); 
recyclerView.setAdapter(myAdapter = new MyAdapter(getBaseContext(), myData, myLayout); 
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); 
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
    linearLayoutManager.setOrientation(LinearLayout.HORIZONTAL); 
} else { 
    linearLayoutManager.setOrientation(LinearLayout.VERTICAL); 
} 
recyclerView.setLayoutManager(linearLayoutManager); 
recyclerView.setItemAnimator(new DefaultItemAnimator()); 

Dies funktioniert gut, wenn ich die Aktivität, während sich das Gerät im Hoch- oder Querformat-Modus zu starten. Aber wenn ich die Ausrichtung in dieser Aktivität ändere, werden die Objekte immer horizontal oder vertikal gezeichnet, abhängig von der Ausrichtung des Geräts beim ersten Start der Aktivität. Das macht für mich keinen Sinn, da nach der Gerätedrehung die Aktivität neu erstellt wird und die LayoutManager die richtige Ausrichtung annimmt.

Hat jemand eine Idee, wie setOrientation Arbeit mit Geräteausrichtung Änderungen vorzunehmen?

+0

Sie haben nicht genügend Code gezeigt, um Ihr Problem diagnostizieren zu können. Zeigen Sie den Code an, mit dem Sie Ihr Layout erstellen. – Squonk

+0

Was meinst du? Der Adapter unterstützt den RecyclerView? – Joris

+0

@Squonk Ich habe mehr Code über die Recyclerview und den Adapter hinzugefügt. – Joris

Antwort

4

Dies geschieht, weil Sie Orientierung setzen, bevor der gespeicherten Zustand in RecyclerView gestellt wird.

Versuchen Sie, die Ausrichtung auf Activity#onPostCreate oder Activity#onResume einzustellen (mit anderen Worten, nachdem der gespeicherte Status wiederhergestellt wurde), so dass der gespeicherte Status den Orientierungswert nicht überschreibt.

Aktualisieren Ab Version 21 behält LLM die Ausrichtung auf Konfigurationsänderungen nicht bei, daher sollte der Code so funktionieren wie er ist. Sie müssen sich nicht um den gespeicherten Zustand kümmern.

Diese Änderung wird vorgenommen, da der gespeicherte Status für das Speichern des Variablenstatus zuständig sein soll, während die Ausrichtung eine Konfiguration ist, die Entwickler bei jeder Erstellung erwarten kann.