Situation suivante: J'ai TabActivity avec par exemple trois onglets, TabA, TabB, TabC.
Il y a un bouton dans l'activité (Act_C_1) de TabC. Donc, si l'utilisateur clique sur ce bouton, une autre activité (Act_C_2) devrait avoir lieu dans TabC.
Je vous remercie d'avance pour vos suggestions/idées.
Mur
UPD:
Voici mon code
TabActivité avec trois activités:
public class TabScreen extends TabActivity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_menu);
TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
intent = new Intent().setClass(this, SecondActivity.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHost.newTabSpec("tab_1").setIndicator("Tab1",null).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, ThirdActivity.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHost.newTabSpec("tab_2").setIndicator("Tab2",null).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, FourthActivity.class);
spec = tabHost.newTabSpec("tab_3").setIndicator("Tab3",null).setContent(intent);
tabHost.addTab(spec);
}
}
Activité 'Act_C_1' ou FourthActivity.Java:
public class FourthActivity extends Activity implements OnClickListener
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.fourth);
Button BtnWeiter = (Button)findViewById(R.id.BtnWeiter);
BtnWeiter.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
// I also tried to use LocalActivityManager
// TabActivity parentTabActivity = (TabActivity) getParent();
// LocalActivityManager manager = parentTabActivity.getLocalActivityManager();
// manager.destroyActivity("tab_3", true);
// manager.startActivity("tab_3", new Intent(this, FourthActivity.class));
finish();
startActivity(new Intent(this, FourthActivity.class));
}
}
Les activités de l'onglet peuvent être modifiées de la manière suivante.
Tout d'abord, laissez-nous comprendre le flux:
Nous avons dans un onglet hôte, une activité (une liste par exemple) à partir de laquelle nous devons accéder à la prochaine activité (par exemple, les détails de l'élément cliqué) sous le même onglet. Pour cela, nous pouvons utiliser le concept de remplacement de l'activité. Définir également les indicateurs pour l'onglet sélectionné et les autres pour savoir que les détails sont affichés maintenant.
Lorsque nous cliquons en arrière, nous devrions avoir l’activité précédente sous le même onglet. Pour cela, au lieu de remplacer l’activité, nous pouvons actualiser l’onglet tout en utilisant le drapeau particulier de l’onglet sélectionné. Aussi, si flag pour show details est true, nous allons afficher la liste dans le même onglet, sinon l'activité avant le tabwidget (utilisation normale de onBackPressed)
Le code peut être comme suit.
(Cela peut être dans le 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);
}
Une fois que vous avez appuyé sur le bouton Précédent, vous activez l'option BackPressed dans chacune des activités de l'onglet pour revenir à la liste à partir de l'écran de détails.
@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 partie la plus importante ici est Constants.LIST_ACTIVITY = 1; il indique l'onglet dans lequel nous sommes. Les activités correspondantes auront donc la valeur 0,1,2 ... etc.
Encore une fois, pour charger la liste correcte (Activty) lorsque l'activité des onglets est actualisée, nous devons l'inclure dans l'onglet onCreate de TabWidget après la création des onglets.
tabHost.setCurrentTab(Constants.LIST_ACTIVITY);
Utilisez simplement Intent.FLAG_ACTIVITY_CLEAR_TOP flag pour remplacer une activité pour l'onglet nécessaire.
intent = new Intent().setClass(this, YourActivity.class);
spec = tabHost.newTabSpec("tab1").setIndicator("Tab1",null)
.setContent(intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
tabHost.addTab(spec);