web-dev-qa-db-fra.com

Android. Comment changer l'activité dans un onglet

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));            
    }        
}
19
Tima

Les activités de l'onglet peuvent être modifiées de la manière suivante.

Tout d'abord, laissez-nous comprendre le flux:

  1. 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.

  2. 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.

  1. Pour aller de la liste aux détails ...

(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);

}
  1. 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);
24
Vicky Kapadia

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);
0
Dimon