2009-06-30 15 views
8

नमस्ते,OnClickListener पर टैब

काम नहीं कर रहा मैं क्लिक प्राप्त करने के लिए कोशिश कर रहा हूँ - जब मेरे TabActivity की वर्तमान में चयनित टैब पर क्लिक घटना। OnTabChangedHandler केवल तभी बदला जाता है जब टैब बदल जाता है, न कि वर्तमान में सक्रिय टैब पर क्लिक किया गया है। डीबगर मुझे बताता है कि मेरे टैबहोस्ट में टैबविड्ज के लिए ऑनक्लिक लिस्टनर पंजीकृत है।

क्या मैं गलत दृश्य के लिए पंजीकरण कर रहा हूं?

इसके अलावा, मैं टैब के लिए एक संदर्भ मेनू बनाने में असमर्थ हूं, केवल इसकी सामग्री के लिए, क्या यह समस्या संबंधित है?

public class TestDroidViewTab extends TabActivity 
           implements TabContentFactory 
           , OnTabChangeListener, OnClickListener { 

    private static final String LOG_KEY = "TEST"; 
    ListView listView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     final TabHost tabHost = getTabHost(); 


     TabHost.TabSpec ts = tabHost.newTabSpec("ID_1"); 
     ts.setIndicator("1"); 
     ts.setContent(this); 
     tabHost.addTab(ts); 

     ts = tabHost.newTabSpec("ID_2"); 
     ts.setIndicator("2"); 
     ts.setContent(this); 
     tabHost.addTab(ts); 

     ts = tabHost.newTabSpec("ID_3"); 
     ts.setIndicator("3"); 
     ts.setContent(this); 
     tabHost.addTab(ts); 
     tabHost.setOnClickListener(this); 
     tabHost.setOnTabChangedListener(this); 
    } 
    public void onClick(View v) { 
     Log.d(LOG_KEY, "OnClick"); 
    } 

    public void onTabChanged(String tabId) { 
     Log.d(LOG_KEY, "OnTabChanged"); 
    } 

उत्तर

10

उपयोग setOnTabChangedListenerOnClickListener के बजाय;)

static TabHost tabHost; 

    tabHost = getTabHost(); 


    tabHost.setOnTabChangedListener(new OnTabChangeListener() { 
     @Override 
     public void onTabChanged(String arg0) { 
     Log.i("******Clickin Tab number ... ", "" + tabHost.getCurrentTab()); 
     }  
}); 
+0

प्रयास करें इससे पहले कि आप के रूप में टैब "क्लिक करने योग्य" प्राप्त करने के लिए एक सुपर विधि कॉल करने वाला नहीं है? जब मैं यह कोड जोड़ता हूं तो यह क्लिक करता है, माउस चमकता है, लेकिन यह इस टैब पर सूची सक्रियता नहीं दिखाता है। –

+0

मेरी गलती क्षमा करें, एक बम की तरह काम करता है, मेरे पास अतिरिक्त कोड था जो आगे नीचे ले रहा था। –

+0

मुझे लगता है कि कोड में गलती है ... यहां इसे टैबहोस्ट के बजाय टोबहोस्ट मिलना चाहिए ..... –

19

आप को देखने के लिए कि किसी विशेष टैब क्लिक किया जाता है चाहते हैं, आप टैब ही है, नहीं TabHost करने के लिए अपने श्रोता जोड़ने की जरूरत है।

एक टैब कार्यान्वयन में विचारों के पदानुक्रम है:

  • TabHost
    • TabWidget
      • (टैब)
      • (टैब)
    • FrameLayout
    • +०१२३५१६४१०६

टैब को फोन करके कार्यावधि में जोड़े जाते हैं: tabHost.addTab(tabHost.newTabSpec(""));

फिर आप को फोन करके अलग-अलग टैब के लिए एक संभाल प्राप्त कर सकते हैं: getTabWidget().getChildAt(4);

संक्षेप में, आप जोड़ रहे हैं अपने OnClickListener करने के लिए एक TabWidget के बच्चे। अब आप अपने व्यक्तिगत टैब पर क्लिक उठा सकते हैं। हालांकि, यह डिफ़ॉल्ट व्यवहार को ओवरराइड करेगा जो टैब पर क्लिक होने पर सामग्री को बदल देगा। इसलिए, अपनी सामग्री को बदलने के लिए, आपके OnClickListener को आपके लिए ऐसा करने की आवश्यकता होगी।

यहाँ एक पूर्ण उदाहरण के लिए, आप क्लिक करें घटना रोकना, और टैब के नीचे सामग्री को बदलने की सुविधा देता है जो है:

final String myTabTag = "My Tab"; 
final int myTabIndex = 3; 

getTabHost().addTab(getTabHost().newTabSpec(myTabTag)); 

getTabWidget().getChildAt(myTabIndex).setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if (getTabHost().getCurrentTabTag().equals(myTabTag)) { 
      getTabHost().setCurrentTab(myTabIndex); 
     } 
    } 
}); 
+0

धन्यवाद बहुत मश यह मेरे लिए काम किया ... :) – praveenb

+0

यह मेरे उद्देश्यों के लिए काम किया, धन्यवाद। – CQM

+0

जब मैं इसे आज़माता हूं तो यह टैब को बदलता है लेकिन टैब के नीचे की सामग्री नहीं ... कोई सुझाव? –

2

आपका खंड गलत, इस्तेमाल होता है:

...

if (getTabHost().getCurrentTabTag().equals(myTabTag) == false) { 
      getTabHost().setCurrentTab(myTabIndex); 
    } 

...

0
मेरी कोड में

, मैं टी कुछ त्रुटियों को दिखाता है और मुझे में getTabWidget(), getTabHost(), आदि जैसे नए नाम बनाने के लिए कहता है। प्रतिक्रिया की प्रतीक्षा कर रहा है।

इस

tabHost.getTabHost().setCurrentTab(myTabIndex); 
संबंधित मुद्दे