È possibile utilizzare un frammento in un viewpager più volte? Sto cercando di creare un'interfaccia utente aggiornata dinamicamente utilizzando ViewPager. Voglio usare lo stesso design, fondamentalmente lo stesso frammento con dati diversi per ogni pagina, come un adattatore listview.Utilizzare un frammento in un ViewPager più volte
risposta
È possibile creare un'istanza della stessa classe Fragment per ogni pagina nel ViewPager, passando la posizione di ViewPager per controllare cosa visualizzare. Qualcosa del genere:
public class MyFragment extends Fragment {
private int mIndex;
public MyFragment(int index) {
mIndex = index;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
switch(mIndex){
case 0:
// do you things..
case 1:
// etcetera
}
}
}
allora, in te FragmentPagerAdapter:
public static class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
return new MyFragment(position);
}
}
In questo modo è possibile riutilizzare la maggior parte del codice di cambiare solo quello che serve nella dichiarazione switch/case.
ma non è possibile creare un costruttore non vuoto di classe frammento –
Hai frainteso il concetto di class
versus object of class
. Il codice sorgente MyFragment.java
definisce class
, che si trasformano in "essere vivente" ogni volta che si un'istanza con new
operatore (new MyFragment();
) - questo crea object
che è un instance
del vostro class
. A meno che non lo impedisca intenzionalmente (utilizzando cioè il pattern Singleton), puoi creare il numero instances
di class
come preferisci, nello stesso modo in cui puoi fare tante torte utilizzando un'unica ricetta. E questo vale anche per i frammenti.
Quindi, fintanto che si crea separataobject
(aka detto instance
) del class
per ogni pagina, si dovrebbe essere in grado di fare quello che vuoi.
è possibile fornire qualche esempio per la spiegazione sopra ..? – Harsha
AFAIK, questo non funzionerà. Potresti usare un "GestureDetector" per guardare i colpi sul tuo frammento esistente. – CommonsWare
BTW, per chiarire, presumo che tu intenda che tu voglia usare un singolo frammento * istanza * - se vuoi dire che vuoi usare solo un singolo frammento * classe *, è perfettamente soddisfacente. – CommonsWare