Comment appeler onglet Onclick et OnTabChange pour le même onglet
Dans mon projet, j'ai deux onglets et un bouton. Pour les deux onglets,j'ai deux activités et bouton d'appel d'activités différents. le truc c'est que je suis en train de montrer le résultat de bouton sur le premier onglet. j'.e tab0 est active sur tab0Event et sur l'événement clic du bouton trop. Et je suis capable de changer l'onglet événements à l'aide de tabHost.setOnTabChangedListener, mais maintenant ce que je veux dire, c'est dire supposons que je clique sur le bouton maintenant le bouton de la vue est l'affichage(tab0 est active) mais encore une fois si je clique sur tab0, tab0 activité doit être affiché.
J'ai essayé de nombreuses solutions pour les en cliquant sur l'onglet, on est
getTabWidget().getChildAt(getTabHost().getCurrentTab()).setOnClickListener
(new View.OnClickListener() {
@Override public void onClick(View v) {
System.out.println(getTabHost().getCurrentTab());
} });
Mais quand j'ai utilisé ce code avec tabChnageListner, onglet ne fonctionne pas et j'ai obtenu des résultats inattendus.
Voulez-vous s'il vous plaît suggérer une solution pour mon problème.
Grâce.
code de travail pour l'onglet changé, c'est que: (fonctionne très bien pour de l'onglet modifier, besoin d'ajouter un Onglet Onclick) de
public class TabLayoutUsingTabChangeEventActivity extends TabActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost);
final TabHost.TabSpec sp1 = tabHost.newTabSpec("TAB1");
TabHost.TabSpec sp2 = tabHost.newTabSpec("TAB2");
//Creating First Tab
Intent intent1 = new Intent(this, Tab1Activity.class);
sp1.setIndicator("TAB1").setContent(intent1);
tabHost.addTab(sp1);
//Creating Second Tab
Intent intent2 = new Intent(this, Tab2Activity.class);
sp2.setIndicator("TAB2").setContent(intent2);
tabHost.addTab(sp2);
//Tab Changed Event
tabHost.setOnTabChangedListener(new OnTabChangeListener(){
@Override
public void onTabChanged(String tabId) {
Log.i("TabId :", tabId);
if(tabId.equals("TAB2")){
Log.i("TAB1", "TAB1 Changed");
Intent intent1 = new Intent().setClass(getApplicationContext(), Tab1Activity.class);
sp1.setIndicator("TAB1").setContent(intent1);
tabHost.setCurrentTab(0);
}
}
});
Button addNewButton = (Button)findViewById(R.id.add_new_ticket_btn);
addNewButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Intent in = new Intent().setClass(getApplicationContext(), AddNewTicketActivity.class);
sp1.setContent(in);
tabHost.setCurrentTab(0);
//startActivity(in);
}
});
}
}
- veuillez mettre à jour votre exigence clairement. il n'est pas clair.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez mettre en œuvre ce listener:
Également lorsque vous ajoutez des onglets jeu de tag pour chaque onglet:
Vous pouvez utilisé Fragment à disposition
Vous ne pouvez pas. Vues dans TabWidget déjà onClickListener et il est nécessaire de fo flux normal. Si vous l'enlevez, vous briser TabWidget logique.
Lorsque vous définissez votre onClickListener vous supprimez previuos onClickListener et vous vous cassez un TabWidget logique.
Habituellement dans de tels cas, le composé cliquez sur écouteur est créé (un écouteur de clics qui gère cliquez sur l'événement et en appelle un autre écouteur de clics). Mais pas dans votre cas, car il n'y a aucun moyen d'obtenir la vieille cliquez auditeur, car la Vue n'a pas getOnClickListener méthode.
C'est TabWidget code source. Toutes les valeurs correspondantes sont privés... donc on ne peut pas fixer anithing de ce côté.
La seule façon d'atteindre votre objectif est un hack avec des Réflexions parce qu'ils permet de lire privée vars. Donc, avant de définir de nouveaux onlick écouteur, vous devriez obtenir l'ancien (à l'aide de Réflexions), puis de créer des composés onClickListener qui fera de votre code de gestion des événements, et ensuite appeler la vieille onClickListener. Ensemble composé cliquez sur l'auditeur à la Vue.