2

nested tab bar with dynamic value嵌套的標籤欄

大家好,我有一個問題關於調用不同value.since標籤欄視圖標籤欄的事件得到單call.unable負荷爲class.for例如通過不同的值,我必須在標籤欄類上加載fri17,sat18,sun19標籤。它的內容爲第17天值,第18天值,第19天值,在通過日期17到列表類後必須在列表視圖中加載。我嘗試了更改監聽器的選項卡,仍然無法找到解決此問題的方法。任何人都可以幫助我。

package com.androidexample.tabbar; 




import java.util.ArrayList; 
import java.util.HashMap; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.NodeList; 

public class TabBar extends TabActivity implements OnTabChangeListener{ 
public static String name; 

static final String URL =   "http://182.160.161.2/~mani/homeshow/web_serv/timeTableGetByRequest.php?event_id=14&sortBy=time"; 

static final String KEY_SONG = "date"; // parent node 
static final String KEY_IDs = "timetable_date"; 
public HashMap<String, String> map; 
public ArrayList<HashMap<String, String>> songsList; 
String kid,ktit,kart,kdur,kurl,EID; 

TabHost tabHost; 
TabHost.TabSpec spec; 
Intent intent; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.t2); 


     tabHost = getTabHost(); 
tabHost.setOnTabChangedListener(this); 





    songsList = new ArrayList<HashMap<String, String>>(); 

    final NewProdCompleteXMLParser parser = new NewProdCompleteXMLParser(); 
    String xml = parser.getXmlFromUrl(URL); 
    final Document doc = parser.getDomElement(xml); 

    NodeList nl = doc.getElementsByTagName(KEY_SONG); 

    for (int i = 0; i < nl.getLength(); i++) { 

    map = new HashMap<String, String>(); 
     Element e = (Element) nl.item(i); 

     map.put(KEY_IDs, parser.getValue(e, KEY_IDs)); 



     songsList.add(map); 

     kid=parser.getValue(e, KEY_IDs); 
     System.out.println("kid"+kid); 


     intent = new Intent().setClass(this, Tab1.class);  
     spec= tabHost.newTabSpec("hhj").setIndicator(kid) 
     .setContent(intent); 

      tabHost.addTab(spec); 
      tabHost.getTabWidget().getChildAt(i).setBackgroundResource(R.drawable.tab_bg); 
      TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title); 
      tv.setTextColor(Color.WHITE); 

    } 


    tabHost.getTabWidget().setCurrentTab(0); 
     tabHost.getTabWidget().getChildAt(0).setBackgroundResource(R.drawable.tab_hover); 


    } 


    public void onTabChanged(String tabId) { 
name=songsList.get(tabHost.getCurrentTab()).get("timetable_date"); 
System.out.println("on tab changed"+name); 




    /************ Called when tab changed *************/ 

    //********* Check current selected tab and change according images *******/ 


    for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) 
    { 




     tabHost.getTabWidget().getChildAt(i).setBackgroundResource(R.drawable.tab_bg); 
    } 


    for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) 
     { 



     tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).setBackgroundResource(R.drawable.tab_hover);   
     } 

    Log.i("tabs", "CurrentTab: "+tabHost.getCurrentTab()); 

    while(tabHost.getCurrentTab()==1) 
    { 

     Intent intent1 = new Intent().setClass(this, Tab1.class); 
     spec.setContent(intent1); 
       //Add intent to tab 

     System.out.println("on tab changed"+name); 
     tabHost.getTabWidget().getChildAt(1).setBackgroundResource(R.drawable.tab_bg); 
    } 


} 

} 

必須發送System.out.println("on tab changed"+name);。這名VAL(ie.fri17..sat 18.on每個選項卡點擊旁邊TAB1類)

public class Tab1 extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tab1); 

     TabBar tb=new TabBar(); 
     String name = tb.name; 
     System.out.println("on tab changed TT"+name); 
    } 
} 
+0

表演什麼ü試過嗎? – keshav

+0

我已經更新了。你可以參考@keshav – Jenefer

回答

1

你有兩個更好的Android特定的選項

1>使用JakeWharton的Android-ViewPagerIndicator

2>非常有名的astuetz PagerSlidingTabStrip

使用這個庫和樣本做一些hacks加載你的每個父標籤中的那些ample活動或片段。

除此之外,您可以做two way communication between a TabActivity(即承載TabHost的活動)及其各自的子選項卡(每個選項卡內的活動)。佈局

要點代碼:

<?xml version="1.0" encoding="utf-8"?> 
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/tabhost" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<LinearLayout 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<TabWidget 
android:id="@android:id/tabs" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content"> 
<TextView 
android:tag="tab0" 
android:text="Tab 1" 
android:background="@android:drawable/btn_star_big_on" 
android:layout_width="wrap_content" 
android:layout_height="fill_parent" 
/> 
<TextView 
android:tag="tab1" 
android:text="Tab 2" 
android:layout_width="wrap_content" 
android:layout_height="fill_parent" 
/> 
<TextView 
android:tag="tab2" 
android:text="Tab 3" 
android:layout_width="wrap_content" 
android:layout_height="fill_parent" 
/> 
</TabWidget> 
<FrameLayout 
android:id="@android:id/tabcontent" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<TextView 
android:text="Hallo1" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" /> 
<TextView 
android:text="Hallo2" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" /> 
<TextView 
android:text="Hallo3" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" /> 
</FrameLayout> 
</LinearLayout> 
</TabHost> 

活動:

import java.util.HashMap; 
import java.util.LinkedList; 
import java.util.List; 
import java.util.Map; 
import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.FrameLayout; 
import android.widget.TabHost; 
import android.widget.TabHost.TabContentFactory; 
import android.widget.TabHost.TabSpec; 
import android.widget.TabWidget; 
import android.widget.TextView; 

public class SensorActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.tabsample); 
TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost); 
tabHost.setup(); 
final TabWidget tabWidget = tabHost.getTabWidget(); 
final FrameLayout tabContent = tabHost.getTabContentView(); 
// Get the original tab textviews and remove them from the viewgroup. 
TextView[] originalTextViews = new TextView[tabWidget.getTabCount()]; 
for (int index = 0; index < tabWidget.getTabCount(); index++) { 
originalTextViews[index] = (TextView) tabWidget.getChildTabViewAt(index); 
} 
tabWidget.removeAllViews(); 
// Ensure that all tab content childs are not visible at startup. 
for (int index = 0; index < tabContent.getChildCount(); index++) { 
tabContent.getChildAt(index).setVisibility(View.GONE); 
} 
// Create the tabspec based on the textview childs in the xml file. 
// Or create simple tabspec instances in any other way... 
for (int index = 0; index < originalTextViews.length; index++) { 
final TextView tabWidgetTextView = originalTextViews[index]; 
final View tabContentView = tabContent.getChildAt(index); 

TabSpec tabSpec = tabHost.newTabSpec((String) tabWidgetTextView.getTag()); 
tabSpec.setContent(new TabContentFactory() { 
@Override 
public View createTabContent(String tag) { 
return tabContentView; 
} 
}); 
if (tabWidgetTextView.getBackground() == null) { 
tabSpec.setIndicator(tabWidgetTextView.getText()); 
} else { 
tabSpec.setIndicator(tabWidgetTextView.getText(), tabWidgetTextView.getBackground()); 
} 
tabHost.addTab(tabSpec); 
} 
// tabHost.setCurrentTab(0); 
} 
} 

來源:gist

0

你必須寫不同類型的每個標籤內容

,然後用這個

TabSpec tab0 = tabHost.newTabSpec("tab0"); 
     tab0.setIndicator("Tab0"); 
    Intent tab0Intent = new Intent(this, Tab0.class); 
    tab0.setContent(tab0Intent); 

    TabSpec tab1 = tabHost.newTabSpec("tab1"); 
    tab1.setIndicator("Tab1"); 
    Intent tab1Intent = new Intent(this, Tab1.class); 
    tab1.setContent(tab1Intent); 

    TabSpec tab2 = tabHost.newTabSpec("tab2"); 
    tab2.setIndicator("Tab2"); 
    Intent tab2Intent = new Intent(this, Tab2.class); 
    tab2.setContent(tab2Intent); 

    TabSpec tab3 = tabHost.newTabSpec("tab3"); 
    tab3.setIndicator("Tab3"); 
    Intent tab3Intent = new Intent(this, Tab3.class); 
    tab3.setContent(tab3Intent); 

    TabSpec tab4 = tabHost.newTabSpec("tab4"); 
    tab4.setIndicator("Tab4"); 
    Intent tab4Intent = new Intent(this, Tab4.class); 
    tab4.setContent(tab4Intent); 

    tabHost.addTab(tab0); 
    tabHost.addTab(tab1); 
    tabHost.addTab(tab2); 
    tabHost.addTab(tab3); 
    tabHost.addTab(tab4); 

也看到這些

http://www.mkyong.com/android/android-tablayout-example/

http://www.androidhive.info/2013/10/android-tab-layout-with-swipeable-views-1/