2012-10-22 17 views
7

Hey ragazzi Sto lavorando a un'app per Android in cui voglio implementare un gruppo attività per ogni scheda. Ma dal momento che il gruppo di attività è deprecato, devo usare Frammenti. Ho cercato su Google gli ultimi giorni e ho fatto qualche ricerca su quell'argomento, ma ancora non capisco. Il grafico seguente descrive cosa voglio fare. Inoltre vengo direttamente da iOS e ho bisogno di un feedback sulle mie teorie.Gruppo Android frammento vs. attività

enter image description here

Come si può vedere ogni frammento è costituito da una WebView frammento. Quando l'utente fa clic su un collegamento in quel frammento di WebView, la richiesta viene catturata e viene sostituito un nuovo frammento che contiene nuovamente una WebView e carica il collegamento su cui è stato fatto clic nel frammento precedente. A un certo punto l'utente decide di tornare al primo frammento e preme il pulsante indietro.

I frammenti devono uscire dalla pila nell'ordine inverso fino a quando non vede nuovamente il primo. Idealmente ogni frammento dovrebbe salvare la sua istanza, così che quando l'utente torna indietro, WebView non ha bisogno di caricare nuovamente il sito.

Mi sono imbattuto in ActionBar Sherlock che fornisce un esempio sulle schede Frammenti. C'è anche un esempio di una pila di frammenti. Sarebbe ideale combinare questi due esempi, in modo che ogni scheda sia composta da una pila di frammenti.

mie le strutture di codice hanno il seguente aspetto:

mio TabHost Frammento

public class MyActivity extends SherlockFragmentActivity { 
static TabHost mTabHost; 
static TabManager mTabManager; 

public static int THEME = R.style.Theme_Sherlock_Light; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    setTheme(THEME); //Used for theme switching in samples 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.fragment_tabs); 
    mTabHost = (TabHost)findViewById(android.R.id.tabhost); 
    mTabHost.setup(); 
    mTabManager = new TabManager(this, mTabHost, R.id.myRealTabContent); 

    // adding some Fragment Tabs 
    mTabManager.addTab(mTabHost.newTabSpec(tabNames[i]).setIndicator(tabNames[i]), 
       FragmentStackSupport.CountingFragment.class, bundle); 


    if (savedInstanceState != null) { 
     mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); 
    } 
} 


@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString("tab", mTabHost.getCurrentTabTag()); 
} 



// defining the Tab Manager 

Come sarebbe lo Stack Frammento per ogni scheda dovrebbe essere simile? Attualmente ho un'attività frammento con un frammento all'interno di ciascuna scheda. Ma non raggiungo la logica di cui ho bisogno.

Ecco il mio codice: (? O ci sono esempi sul web) My Fragment with WebView inside

Sarei contento per un feedback e suggerimenti. Ho anche alcune preoccupazioni sulla memoria: quando l'utente fa clic e fa clic e i clic e la memoria deve contenere ciascun frammento nello stack.

Cheers.

+5

+1 per una domanda ben spiegata. –

+0

hai mai trovato una soluzione solida a questo problema? –

risposta

1

Non riesco a pensare a molti buoni motivi per creare un nuovo frammento ogni volta che l'utente fa clic su un collegamento. C'è una ragione per cui stai provando a farlo? Se si restituisce semplicemente false da shouldOverrideUrlLoading() invece di creare un nuovo frammento, WebView caricherà la nuova pagina e, se si desidera tornare indietro, è possibile utilizzare i metodi canGoBack() e goBack(). Per gestire le pressioni del pulsante Indietro, è possibile ignorare onKeyDown dell'attività e fare qualcosa del tipo:

if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack() { 
     myWebView.goBack(); 
     return true; 
    } 
+0

Grazie per la risposta. Sono d'accordo che non è ottimale, ma ho le mie ragioni. Anche se penso che seguirò il tuo consiglio - è molto più facile. Tuttavia, sono interessato a come implementare una pila di frammenti per ogni scheda. –

+0

Bene, dal momento che hai chiesto, sono sicuro che non è una grande idea, ma potresti letteralmente avere uno Stack (o altra struttura dati) di Frammenti per ogni scheda. Ogni volta che l'utente fa clic su un collegamento, aggiungi il frammento alla pila di quella scheda (non vorrai aggiungere alcun frammento al backstack dell'applicazione per ovvi motivi). Quindi, premi il pulsante indietro e controlla se lo stack della scheda attualmente visualizzata non è vuoto e, in tal caso, fai clic su quello successivo per visualizzarlo nella scheda corretta. – ajpolt

+0

Forse con un'attività separata per scheda, quindi ogni attività avrebbe i propri frammenti? – tbkn23

Problemi correlati