2012-04-07 8 views
1

Ich implementiere einen ViewPagerIndicator, der wie erwartet in vertikaler Ausrichtung funktioniert. Wenn ich in horizontaler Ausrichtung teste, entweder durch Umschalten zur Laufzeit (physisches Drehen des Telefons) oder wenn die App im horizontalen Modus startet (Telefon war horizontal, bevor die App gestartet wurde), bekomme ich einen leeren weißen Bereich, wo der ViewPagerIndicator sein sollte. Ich habe ein Layout/main.xml und Layout-Land/main.xml mit ein paar Schaltflächen, die wie erwartet angezeigt werden (vertikal im vertikalen Modus gestapelt, als Gitter im horizontalen Modus). Wenn ich die Schaltfläche „Bearbeiten“ drücken, starte ich die Bearbeitung Aktivität:Android - vertikale Ausrichtung funktioniert, horizontale Ausrichtung leer

public class ATEditActivity extends Activity { 
    static final int OFFSCREEN_PAGE_LIMIT = 5; 
ViewPager pager = null; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.edit); 

     int iPage = 2; // set the page based on caller's intentions 
     Bundle bndlExtras = getIntent().getExtras(); 
     if (bndlExtras != null) { 
     iPage = bndlExtras.getInt("PAGE"); 
     } 

     ATViewPagerAdapter adapter = new ATViewPagerAdapter(this); 

     pager = (ViewPager) findViewById(R.id.awesomepager); 
     pager.setOffscreenPageLimit(OFFSCREEN_PAGE_LIMIT); 
     pager.setAdapter(adapter); 

     TitlePageIndicator indicator = (TitlePageIndicator) findViewById(R.id.TitlePageIndicator); 
     indicator.setViewPager(pager); 
     indicator.setCurrentItem(iPage); 
    } 
} 

edit.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:background="#FFFFFF" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_marginLeft="0dp" 
    android:layout_marginRight="0dp"> 

<EditText 
    android:id="@+id/etName" 
    android:inputType="textAutoComplete" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/edit_text" 
    android:layout_margin="4dp" 
    android:hint="@string/name" /> 

<com.viewpagerindicator.TitlePageIndicator 
    android:id="@+id/TitlePageIndicator" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    style="@style/Widget.MyTitlepageIndicator" /> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/awesomepager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

Irgendwelche Gedanken darüber, warum die ViewPagerIndicator nicht im horizontalen Modus angezeigt werden? Wird mehr Information benötigt?

Antwort

0

Sie müssen wahrscheinlich überschreiben siehe reference, da Ihre App die Ressourcen erneut abrufen und alles zeichnen muss.

+0

Wenn ich die onConfigurationChanged-Dokumentation richtig gelesen habe, würde ich eine Speicherklasse implementieren, die Object erweitert und Getter und Setter für alle Daten hat, die ich speichern möchte (aber nicht die Sichten und Adapter, die in onCreate neu erstellt werden). Dann suche ich in onCreate nach den gespeicherten Daten und lade sie, wenn sie gefunden wurde. Ist das in Ordnung? – Dave

+0

Sie könnten es auf diese Weise tun oder wenn es Ihnen nichts ausmacht, nur globale Variablen in Ihrer App zu speichern und Sie können einen Verweis auf Ihre App erhalten und auf diese Weise auf die Variablen zugreifen. Oder Sie speichern nur so viele Daten in savedInstance, dass Sie diese Informationen verwenden können, um das Layout mit den relevanten Werten wiederherzustellen. Eine andere Sache, die du konntest, ist deine Konfiguration so einzustellen, dass sie deine Aktivität nicht zerstört und sie erneut startet, siehe http://developer.android.com/reference/android/R.attr.html#configChanges – EdChum

+0

Ich habe es endlich geschafft einige Tests auf dem onConfigurationChanged() -Mechanismus. Diese Funktion wird erfolgreich aufgerufen, wenn Toast angezeigt wird. Ich kann etwas arbeiten, um den ViewPagerAdapter einzurichten. Der TitlePageIndicator wird weiterhin nicht angezeigt, wenn sich das Telefon im horizontalen Modus befindet. Ich habe den Code, der das TitlePageIndicator-Objekt erstellt, auskommentiert, und ich sehe es in keinem der beiden Modi, sodass ich weiß, dass ich an der richtigen Stelle bin. – Dave

0

Nach drei oder vier Tagen, in denen ich alles Mögliche ausprobieren konnte, entschied ich mich, dass in meinem Projekt wirklich etwas durcheinander gekommen war. Also erstellte ich ein neues Projekt, das nur den minimalen Code benötigte, um den ViewPagerIndicator zum Laufen zu bringen . Das neue Projekt arbeitet jetzt mit beiden Orientierungen "out-of-the-box". Ich habe keine Ahnung, was mein altes Projekt dazu brachte, nur mit der horizontalen Ausrichtung zu spielen, aber ich werde das neue Projekt in kurzer Zeit auf Kurs und auf Geschwindigkeit bringen, jetzt, wo es wie erwartet funktioniert.