2010-08-09 7 views
6

Ich habe eine Tabview in meiner Android-App mit 3 Tabs. Die Tabs funktionieren alle gut.Erfassen der Registerkarte Klick-Ereignis in Android Tabview

Jetzt möchte ich einige zusätzliche Logik ausführen, wenn auf die Registerkarte (auf der Oberseite) der derzeit aktiven Registerkarte geklickt wird. Hier

ein Beispiel:

In einem meiner Tabs, biete ich eine Option für den Benutzer zu sortieren Dinge in einer anderen Reihenfolge. Wenn ich die Registerkarte der gerade aktiven Registerkarte drücke, möchte ich alle diese Sortierungen zurücksetzen.

Ist es möglich, das tab-click-Ereignis in tabview zu erfassen und einige zusätzliche Logik durchzuführen?

Edit: Bearbeitet für Klarheit. Diese

+0

'TabHost.OnTabChangeListener' – st0le

+1

TabHost.onTabChangeListener wird nur ausgelöst, wenn die Registerkarte geändert wird. Aber ich möchte, dass das Ereignis ausgelöst wird, auch wenn die Tab-Kopfzeile der aktuell aktiven Registerkarte angeklickt wird. Ist es möglich, das zu tun? – Sudar

Antwort

4

ist, wie Ihr Code funktionieren sollte:

getTabWidget().getChildAt(getTabHost().getCurrentTab()).setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
     //do whatever you need 

     } 
}); 
+0

Danke, dieser Code funktioniert. Aber es führt ein neues Problem ein. Jetzt werden die Tabs nicht mehr umgeschaltet, wenn sie angeklickt werden. Muss ich irgendwelche zusätzlichen Methoden aufrufen, um die Tabs zu ändern? – Sudar

+0

Ich arbeite daran, dieses Problem ebenfalls zu lösen ... bisher habe ich keine Antwort, wenn ich nicht Ihren eigenen "Umschalt" -Code implementieren soll. Wenn Sie erfolgreich sind, teilen Sie bitte :) http://StackOverflow.com/Questions/4337514/android-Tabwidget-Detect-Click-on-Current-Tab – 0m4r

+0

Vikas zeigt eine Lösung, um die Tabs zu wechseln. Fügen Sie im Listener hinzu: getTabHost(). SetCurrentTab (getTabHost(). GetCurrentTab()); Oder wenn die getCurrentTab() Probleme bereitet, erstellen Sie einen finalen Int mit dem Index der Registerkarte außerhalb des Listeners und verwenden Sie diesen stattdessen. – Niels

0
for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) 
    { 
     getTabWidget().getChildAt(i).setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       if (getTabHost().getCurrentTabTag().equals(v.getTag())) 
       { 
        int nextTab = getTabHost().getCurrentTab(); 
        tabHost.setCurrentTab(prevTab); 
        tabHost.setCurrentTab(nextTab); 
        prevTab = nextTab; 
       } 
       else 
        tabHost.setCurrentTabByTag((String) v.getTag()); 
      } 
     }); 
    } 

Sie eine globale Variable müssen;

private int prevTab = 1; //any tab except the initial one. 

Dieser Code funktioniert für mich. Eine kleine hässliche Sache ist, dass Sie dasselbe Tag für die Registerkarte setzen und anzeigen müssen;

intent = new Intent().setClass(this, AnaSayfa.class); 
    spec = tabHost.newTabSpec("firstTab").setIndicator(makeTabIndicator(R.drawable.firstTab, "First Tab" , "firstTab")) 
        .setContent(intent); 
    tabHost.addTab(spec); 

und makeTabIndicator Verfahren ist so,

private View makeTabIndicator(int drawable, String text, String viewTag){ 

     View view = LayoutInflater.from(this).inflate(R.layout.tab_layout, null); 

     ImageView image = (ImageView) view.findViewById(R.id.imageView1);  
     image.setImageResource(drawable); 
     image.setAdjustViewBounds(true); 

     TextView tv = (TextView) view.findViewById(R.id.textView1); 
     tv.setText(text); 

     view.setTag(viewTag);    
     return view; 
    } 
3

I zum Nachweis von Klicks auf ausgewählten Tab

Schritte eine saubere und einfache Lösung gefunden:

1: Erweitern TabActivity in Ihrem Klasse. 2: In der onResume() -Methode die folgende Methode

Für jedes Register (i) implementieren diese umzusetzen:

TabHost tabHost = getTabHost(); 

public void onResume() { 

super.onResume(); 
    tabHost.getTabWidget().getChildAt(0).setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
        count++; 
        tabHost.setCurrentTab(0); 
    //based on your count value..you can do anything...like going back to homepage... 
    // similar thing exist on iphone (double tab a tab..it takes back to homepage) 
    } 
    }); 
}  

Da wir immer eine feste Anzahl von Tabs, es separat Umsetzung kein Problem .

+0

Meinst du die onResume() Methode der Aktivität?Auch wäre es hilfreich, wenn Sie ein komplettes Beispiel zeigen können. – Sudar

+0

@ Sudar..ich habe extra Code hinzugefügt ... hoffe das hilft dir – Vikas

Verwandte Themen