java - करत - सिनारेस्ट न्यू




एंड्रॉइड टैब प्रतीक अपडेट करना (4)

कस्टमाइज्ड एंड्रॉइड टैब्स के बारे में कोड उदाहरण के साथ मेरी पोस्ट देखें

धन्यवाद SPCT

मेरे पास एक ऐसी गतिविधि है जिसमें TabHost है जिसमें टैबएसपीईसी का एक सेट होता है जिसमें टैब के द्वारा प्रदर्शित किए जाने वाले आइटम वाले सूची दृश्य होते हैं जब प्रत्येक TabSpec बनाया जाता है, तो मैं टैब हैडर में प्रदर्शित होने के लिए एक आइकन सेट करता हूं।

TabSpecs एक setupTabs() विधि के भीतर इस तरह से बनाया जाता है जो टैब की उचित संख्या को बनाने के लिए setupTabs() की है:

TabSpec ts = mTabs.newTabSpec("tab");
ts.setIndicator("TabTitle", iconResource);

ts.setContent(new TabHost.TabContentFactory(
{
    public View createTabContent(String tag)
    {
        ... 
    }            
});
mTabs.addTab(ts);

कुछ ऐसे उदाहरण हैं जहां मैं अपने कार्यक्रम के निष्पादन के दौरान प्रत्येक टैब में प्रदर्शित होने वाले आइकन को बदलना चाहता हूं। वर्तमान में मैं सभी टैब को हटा रहा हूं, और उपरोक्त कोड को फिर से बनाने के लिए बुला रहा हूं।

mTabs.getTabWidget().removeAllViews();
mTabs.clearAllTabs(true);
setupTabs();

क्या सभी टैब को हटाए और पुनः बनाने के बिना प्रदर्शित किया जा रहा आइकन को बदलने का एक तरीका है?


यह वही है जो मैंने किया और यह मेरे लिए काम करता है मैंने इस फ़ंक्शन को उस गतिविधि में बनाया है जो टैबबेरएक्टिविटी से फैली हुई है

public void updateTab(int stringID) {
    ViewGroup identifyView = (ViewGroup)getTabWidget().getChildAt(0);
    TextView v =  (TextView)identifyView.getChildAt(identifyView.getChildCount() - 1);
    v.setText(stringID);
}

आप पाठ के बजाय छवि को बदलने के लिए इस फ़ंक्शन को संशोधित कर सकते हैं या आप दोनों को बदल सकते हैं, आप किसी भी टैब बच्चे को पाने के लिए भी इसे संशोधित कर सकते हैं। मैं विशेष रूप से रनटाइम पर पहली टैब के टेक्स्ट को संशोधित करने में रुचि रखता था

मैंने इस फ़ंक्शन को इस कॉल के उपयोग से संबंधित गतिविधि से बुलाया

getParent().updateTab(R.string.tab_bar_analyze);

इसे इस्तेमाल करे:

tabHost.setOnTabChangedListener(new OnTabChangeListener() {
    public void onTabChanged(String tabId) {
        if (TAB_MAP.equals(tabId)) {
            ImageView iv = (ImageView) tabHost.getTabWidget().getChildAt(0).findViewById(android.R.id.icon);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_map_black));
            iv = (ImageView) tabHost.getTabWidget().getChildAt(1).findViewById(android.R.id.icon);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_list_white));
        } else if (TAB_LIST.equals(tabId)) {
            ImageView iv = (ImageView) tabHost.getTabWidget().getChildAt(0).findViewById(android.R.id.icon);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_map_white));
            iv = (ImageView) tabHost.getTabWidget().getChildAt(1).findViewById(android.R.id.icon);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_list_black));
        }
    }
});

बस महाकाव्य के उत्तर की पुष्टि करने के लिए, यहां उसका समाधान कोड में है (जो वास्तव में काम करता है):

tabHost.setOnTabChangedListener(new OnTabChangeListener() {
    public void onTabChanged(String tabId) {
        if (TAB_MAP.equals(tabId)) {
            ImageView iv = (ImageView) tabHost.getTabWidget().getChildAt(0).findViewById(android.R.id.icon);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_map_black));
            iv = (ImageView) tabHost.getTabWidget().getChildAt(1).findViewById(android.R.id.icon);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_list_white));
        } else if (TAB_LIST.equals(tabId)) {
            ImageView iv = (ImageView) tabHost.getTabWidget().getChildAt(0).findViewById(android.R.id.icon);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_map_white));
            iv = (ImageView) tabHost.getTabWidget().getChildAt(1).findViewById(android.R.id.icon);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_list_black));
        }
    }
});

बेशक यह बिल्कुल पॉलिश नहीं है और getChildAt () में उन प्रत्यक्ष सूचकांकों का उपयोग बिल्कुल अच्छा नहीं है ...





android-tabhost