ViewFlipper vs frammenti

Ho un'attività con un ViewFlipper che passa tra un gruppo di visualizzazioni (pagine) con i miei dati.

Sto considerando di utilizzare le API dei frammenti per passare tra i miei punti di vista. Quali sono i vantaggi di farlo?

  • popolare una spinner dal database
  • Carena convessa su Java Android Opencv 2.3
  • ActionBar o ActionBarSherlock - Smoothly Hide / Mostra l'ActionBar
  • Motore di Google App - Endpoint Cloud - Il nome dell'applicazione non è impostato
  • come utilizzare il selettore numbersco con la window di dialogo
  • Aggiornamento dell'elenco di aggiornamento onResume Android
  • Potrei vedere un guadagno di performance utilizzando frammenti poiché ViewFlipper sostituisce essenzialmente la bandiera di visibilità ei frammenti effettivamente sostituiscono la gerarchia delle visualizzazioni mentre aggiungete / rimuovi?

    Può qualcuno che ci dia più approfondimento su questo?

    Grazie!

  • Scheda Flip nella visualizzazione elenco di Android
  • Cosa succede quando tutte le attività di un'applicazione finiscono?
  • Impatto immediato di app su adview.loadAd, SecurityException: imansible trovare il provider com.google.android.gsf.gservices
  • OrizzontaleScrollView all'interno del trattamento con TouchLook ScrollView
  • Arresta l'output sul button Indietro Android in PhoneGap - Build
  • Frammenti, DialogFragment e Rotazione dello schermo
  • 2 Solutions collect form web for “ViewFlipper vs frammenti”

    Un frammento rappresenta un comportmento o una porzione dell'interface utente in un'attività. È ansible combinare più frammenti in un'unica attività per creare un'interface utente a più riframeworks e riutilizzare un frammento in più attività. Puoi pensare a un frammento come sezione modulare di un'attività che ha un proprio ciclo di vita, riceve i propri events di input e che puoi aggiungere o rimuovere quando l'attività è in esecuzione (tipo di "sub attività" che puoi riutilizzo in diverse attività).

    Un frammento deve essere sempre incorporato in un'attività e il ciclo di vita del frammento è direttamente influenzato dal ciclo di vita dell'attività ospite. Ad esempio, quando l'attività viene interrotta, così sono tutti frammenti e, quando l'attività viene distrutta, sono tutti frammenti. Tuttavia, mentre un'attività è in esecuzione (è nello stato di ripristino del ciclo di vita), è ansible manipolare each frammento in modo indipendente, ad esempio aggiungerli o rimuoverli. Quando si esegue una transazione di tale frammento, è ansible anche aggiungerlo a uno stack di back gestito dall'attività, ognuna voce di stack posteriore nell'attività è un record della transazione di frammento che si è verificato. Lo stack posteriore consente all'utente di invertire una transazione di frammento (navigare indietro), premendo il button BACK.

    Ma ViewFlipper funziona in un'unica attività. Simple ViewAnimator che animerà tra due o più viste che sono state aggiunte ad esso. Viene visualizzato un solo figlio alla volta. Se richiesto, può passare automaticamente tra each bambino ad un intervallo regolare.

    EDIT: Sto parlando di ViewPager qui, non ViewFlipper.

    Il vantaggio di utilizzare un ViewPager è che è molto semplice da usare. È sufficiente creare un FragmentPagerAdapter e compilare un paio di campi semplici. Di seguito è un esempio che ho scritto per visualizzare gli elementi che sono passati dalla class padre.

    public static class DashboardPagerAdapter extends FragmentPagerAdapter { private static final int NUM_ITEMS_PER_SCREEN = 12; private List<View> mAllItems; private int mNumScreens; public DashboardPagerAdapter(FragmentManager fm, List<View> allItems) { super(fm); mAllItems = allItems; mNumScreens = (int) Math.ceil(mAllItems.size() / (float) NUM_ITEMS_PER_SCREEN); Log.d(TAG, "num screens: " + mNumScreens); } @Override public int getCount() { return mNumScreens; } @Override public Fragment getItem(int position) { DashboardScreenFragment screen = DashboardScreenFragment .newInstance(); for (int i = position * NUM_ITEMS_PER_SCREEN; i < (position + 1) * NUM_ITEMS_PER_SCREEN; i++) { if (i >= mAllItems.size()) { break; } screen.addChild(mAllItems.get(i)); } return screen; } } 

    E l'impostazione è super semplice:

      final DashboardPagerAdapter adapter = new DashboardPagerAdapter( getFragmentManager(), mAllButtons); 

    Contrariamente a quanto detto da @ sebap123, puoi utilizzare Fragmenti con Android v4 e superiore con la Libreria di Supporto; vedere http://developer.android.com/sdk/compatibility-library.html per i dettagli, ma in realtà significa solo mettere il file jar nella tua directory / libs.

    BTW, nota che con ViewPager, each "pagina" è di per sé un frammento.

    Per quanto riguarda il miglioramento delle performance, dipende da quello che stai confrontando. Raccommand vivamente di provare ViewPager e solo dopo aver preoccupato di problemi di performance. Come diceva Donald Knuth, "dobbiamo dimenticare le piccole efficienze, diciamo circa il 97% del tempo: l'ottimizzazione precoce è la radice di tutto il male".

    In each caso, se si dispone di un numero elevato di pagine, vedere http://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html per una scheda più appropriata.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.