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:
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
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 ..
- 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);
}
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);
fonte
2011-07-26 05:54:42
Ulteriori informazioni richieste, non è possibile comprendere la domanda. –