2012-03-24 14 views
6

Ich habe fünf Aktivitäten/Bildschirme, die ich gerne wischen könnte, jeder hat eine andere Funktion, aber sind miteinander verknüpft daher das UI-Konzept des Wischen zwischen jedem.Android PagerView zwischen Aktivitäten

Ich habe viele Diskussionen um ViewPager und PagerAdapters etc. gefunden, aber scheint nicht zu finden, wo Swiping zwischen verschiedenen Aktivitätsbildschirmen wechselt.

Ist das überhaupt möglich? Könnte mich jemand auf ein Beispielprojekt mit Quellcode hinweisen? Oder zeigen Sie mir, wie Sie ein bestehendes Tutorial anpassen können, um das zu tun, was ich mir wünsche?

Vielen Dank, haben Sie einen guten!

+0

Ich kann Ihnen nicht mit Aktivitäten auf einem Beispiel zeigen. Ich kann ein Codebeispiel für eine Anwendung bereitstellen, die Tabs und Fragmente von Compatibility Pack-Aktionsleisten mit einem ViewPager verwendet, wenn Sie möchten. Grundsätzlich ist jede Registerkarte ein Fragment, das in einer Hauptaktivität gehostet wird (meine App entwickelt jedoch ständig andere Aktivitäten für andere Aufgaben). Aber Sie müssten bereit sein, Fragmente zu verwenden, keine Aktivitäten. Interessiert? – Davek804

Antwort

26

Sie können ViewPager nicht verwenden, um zwischen Activities zu wischen. Sie müssen jeden von Ihnen fünf Activities in Fragments umwandeln, dann kombinieren Sie alles in einem FragmentActivity mit dem Adapter, den Sie mit ViewPager verwenden.

Here's a link das geht ins Detail bei der Umwandlung Ihrer aktuellen Activities info Fragments.

Dies ist die Fragment topic auf der Android-Entwickler-Website, es hat eine Menge nützlicher Informationen.

Here's another example (vollständige Quelle), die TextViews auf jeder Seite aufbläht.

Hier ist ein Beispiel, das ich oben getippt:

PagerAdapter:

public class PagerAdapter extends FragmentPagerAdapter { 

    private final List<Fragment> mFragments = new ArrayList<Fragment>(); 

    public PagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

    public void addFragment(Fragment fragment) { 
     mFragments.add(fragment); 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getCount() { 
     return mFragments.size(); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragments.get(position); 
    } 
} 

Das in onCreate Ihrer FragmentActivity aufgerufen werden soll:

private void initPaging() { 

    FragmentOne fragmentOne = new FragmentOne(); 
    FragmentTwo fragmentTwo= new FragmentTwo(); 

    PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager()); 
    pagerAdapter.addFragment(fragmentOne); 
    pagerAdapter.addFragment(fragmentTwo); 

    ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager); 
    viewPager.setAdapter(pagerAdapter); 
} 

Dies ist ein Beispiel für das Layout y ou'd für Ihre FragmnetActivity verwenden:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

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

</LinearLayout> 

eine neue Klasse erstellen Fragment erstellen, die Fragment erstreckt. Die ersten beiden Methoden, die Sie wünschen, sind overrideonActivityCreated und onCreateView.

Hier ist, wie Sie das tun könnte:

public class FragmentOne extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(THE_LAYOUT_FROM_YOUR_ORIGINAL_ACTIVITY, container, false); 
    return view; 
    } 
} 
+0

Gefunden durch Google; Ich bekomme immer einen Fehler beim Einstellen des Adapters: "this.mPagerAdapter". "mPagerAdapter kann nicht aufgelöst werden oder ist kein Feld". Das ist der einzige Fehler, den ich habe. mPagerAdapter funktioniert im PagerAdapter.Keine Ahnung, wie man es beheben kann. Wenn ich das "Dies" entferne. Ich erhalte eine Warnung, dass initialisePaging() nicht lokal verwendet wird. Schätzen Sie jede Hilfe von denen, die dies sehen –

+0

Ich habe eine Frage, Aneal, Wie kann ich ein neues Fragment zu diesem Adapter von FragmentOne hinzufügen? Weil ich dieses Fragment "Art von Startbildschirm" habe und wenn ich dort etwas anklicke, dann bringt es mich zu einem anderen Bildschirm, in diesem Fall ein anderes Fragment und so weiter ... Wie kann ich das erreichen? – ely87

+0

getItem (int position) wird zweimal aufgerufen und gibt daher indexOutOfBound exception ... –

2

Fix Für mPageradapter

PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager()); 
    pagerAdapter.addFragment(fragmentOne); 
    pagerAdapter.addFragment(fragmentEvents); 

    viewPager = (ViewPager) super.findViewById(R.id.pager); 
    viewPager.setAdapter(pagerAdapter); 
+0

Doenst Arbeit für mich bekam eine Nullpointer Ausnahme! – JavaNullPointer

+0

getItem (int position) wird zweimal aufgerufen und gibt daher indexOutOfBound aus –

Verwandte Themen