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?
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
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
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