2010-08-09 9 views
6

Ho un tabview nella mia app Android con 3 schede. Le schede funzionano correttamente.Catturare l'evento click su scheda in Tabview Android

Ora voglio eseguire una logica aggiuntiva quando si fa clic sulla scheda (in alto) della scheda attualmente attiva.

Ecco un esempio:

In una delle mie schede, ho fornire un'opzione per l'all'utente di ordinare le cose in ordine diverso. Quando si preme la scheda della scheda attualmente attiva, voglio ripristinare tutti questi ordinamenti.

È possibile acquisire l'evento di clic su scheda in tabview ed eseguire una logica aggiuntiva?

Modifica: Modificato per chiarezza.

+0

'TabHost.OnTabChangeListener' – st0le

+1

TabHost.onTabChangeListener viene generato solo quando la scheda viene modificata. Ma voglio che l'evento venga attivato anche se si fa clic sull'intestazione della scheda attualmente attiva. È possibile farlo? – Sudar

risposta

4

Questo è come il tuo codice dovrebbe funzionare:

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

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

     } 
}); 
+0

Grazie, questo codice funziona. Ma sta introducendo un nuovo problema. Ora le schede non vengono cambiate quando vengono cliccati. Devo chiamare altri metodi per modificare le schede? – Sudar

+0

Sto lavorando per risolvere anche questo problema ... finora non ho una risposta se non per implementare il proprio codice di "commutazione". Se hai successo, per favore condividi :) http://stackoverflow.com/questions/4337514/android-tabwidget-detect-click-on-current-tab – 0m4r

+0

Vikas mostra una soluzione per far funzionare le schede. All'interno del listener aggiungere: getTabHost(). SetCurrentTab (getTabHost(). GetCurrentTab()); O se getCurrentTab() dà problemi, crea un finale int con l'indice della tab al di fuori del listener e usalo. – 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()); 
      } 
     }); 
    } 

Hai bisogno di un variabile globale;

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

Questo codice funziona per me. Un po 'brutto è necessario impostare lo stesso tag per la scheda e visualizzare Ad esempio;

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

e il metodo makeTabIndicator è così,

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

ho trovato uno soluzione pulita e semplice per il rilevamento di clic su scheda selezionata

Passi:

1: Estendere TabActivity nella vostra classe. 2: Nel metodo onResume() attuare il seguente metodo

Per ciascuna linguetta (i) attuare questo:

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

poiché abbiamo sempre un numero fisso di schede, implementando separatamente non è un problema .

+0

Intendi il metodo onResume() dell'attività?Inoltre sarebbe utile, se è possibile mostrare un esempio completo. – Sudar

+0

@ Sudar..ho aggiunto codice extra ... spero che ti aiuti – Vikas

Problemi correlati