2011-02-03 8 views
5

Sto tentando di creare un'applicazione con 4 schede nella parte inferiore dello schermo.Avviare un'altra attività all'interno del FrameLayout di TabActivity

Tutti contengono attività (intenti).

E voglio passare qualsiasi attività a un'altra attività. Ma vuoi mantenere visibile TabWidget.

Fammi sapere il più rapidamente possibile se lo sai.


Shaiful

+0

Ulteriori informazioni richieste, non è possibile comprendere la domanda. –

risposta

1

Questo è implementato in Tabs with multiple activities in a single tab.

Tuttavia quando si verificano più attività volte si verifica un errore StackOverFlow. Provato molto duramente ma non in grado di risolverlo .. Per favore qualcuno dica un metodo per risolvere questo problema

Inoltre, è necessario sostituire un'attività in una scheda, Tuttavia dall'attività figlio. Come si fa?

+0

Senza esserne sicuri, suppongo che l'overflow dello stack avvenga spesso dopo aver cambiato molte volte tra le schede. Questo perché le attività sono gestite utilizzando uno stack di attività (vedere http://developer.android.com/reference/android/app/Activity.html). Deve essere possibile sostituire l'attività che si trova in cima allo stack con quella appena chiamata, invece di spingerla. Ma non sono sicuro che questo sia il modo migliore per andare (questa è una vera domanda). – Shlublu

+1

Ehi, ho trovato la soluzione e la sua mostrata sotto –

1

Al in qualsiasi momento ci può essere solo un'attività. Documenti su questo here

+1

Questo non è di alcun aiuto qui. – sulai

3

Il problema dell'errore che si verifica a causa della sostituzione di attività può essere risolto nel modo seguente.

Prima Cerchiamo di capire il flusso:

  1. Abbiamo in una miriade Tab, l'attività (per esempio una lista) da cui abbiamo bisogno di andare alla successiva attività (ad esempio i dettagli per l'elemento cliccato) sotto la stessa scheda. Per questo possiamo usare il concetto di sostituire l'attività. Anche impostando i flag per la scheda selezionata e altro per sapere che i dettagli vengono visualizzati ora

  2. Quando si preme, si dovrebbe ottenere l'attività precedente nella stessa scheda. Per questo invece di sostituire nuovamente l'attività, possiamo aggiornare la scheda mentre utilizziamo il particolare flag per la scheda che è stata selezionata. Anche se la bandiera per la mostra dettagli è vero andremo la lista nella stessa scheda, altrimenti andremo l'attività prima del TabWidget (uso normale del onBackPressed)

Il codice può essere la seguente ..

  1. per andare dalla lista per i dettagli ...

(Questo può essere in onClickListener)

private OnClickListener textListener = new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     Constants.SHOW_DETAILS = true; 
     Intent intent = new Intent(context, DetailsActivity.class); 
     replaceContentView("activity3", intent); 
     } 
}; 

public void replaceContentView(String id, Intent newIntent) { 
    View view = ((ActivityGroup) context) 
      .getLocalActivityManager() 
      .startActivity(id, 
        newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
      .getDecorView(); 
    ((Activity) context).setContentView(view); 

} 
  1. Quando schiena premuta è fatto ridefiniamo il BackPressed in ciascuna delle attività sotto la scheda per passare all'elenco di nuovo dalla schermata dei dettagli

    @Override 
        public void onBackPressed() { 
    // TODO Auto-generated method stub 
    super.onBackPressed(); 
    if (MathHelper.SHOW_DETAILS) { 
        Log.e("back", "pressed accepted"); 
        Constants.LIST_ACTIVITY = 1; 
        Constants.SHOW_DETAILS = false; 
        Intent intent = new Intent(this, Tab_widget.class); 
        startActivity(intent); 
        finish(); 
        } 
    } 
    

La parte più importante è Costanti .LIST_ACTIVITY = 1; indica in quale scheda ci troviamo.quindi le attività corrispondenti avranno il valore di 0,1,2 ... ecc.

Ancora una volta per caricare l'elenco corretto (Activty) quando l'attività di tabulazione viene aggiornata, dobbiamo includerla nel TabWidget onCreate dopo la creazione di le schede

tabHost.setCurrentTab(Constants.LIST_ACTIVITY); 
Problemi correlati