2011-07-26 55 views
4

我在標籤視圖中有問題。我必須顯示標籤查看許多導航。例如 。在名爲「銷售」的第一個標籤中,它列出了所有的銷售路線。如果用戶點擊一個路線,則需要按照明智的方式去第一個標籤中的零售商列表。有很多頁面(視圖)可用。安卓標籤視圖

從我它只顯示標籤在第一個視圖,這意味着當它加載選項卡時,它顯示我的銷售路線列表與選項卡視圖。當我點擊銷售路線時,它會顯示零售商,但不會顯示選項卡視圖。

這是我的代碼:tabview.xml

<?xml version="1.0" encoding="utf-8"?> 

<TabHost android:layout_width="fill_parent" 
android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/tabhost"> 
<LinearLayout android:id="@+id/LinearLayout01" 
    android:orientation="vertical" android:layout_height="fill_parent" 
    android:layout_width="fill_parent"> 
    <TabWidget android:id="@android:id/tabs" 
     android:layout_height="wrap_content" android:layout_width="fill_parent"></TabWidget> 
    <FrameLayout android:id="@android:id/tabcontent" 
     android:layout_height="fill_parent" android:layout_width="fill_parent"></FrameLayout> 
</LinearLayout> 

這是我mainActivity:

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

    TabHost t = getTabHost(); 
    TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost); 

    TabSpec firstTabSpec = tabHost.newTabSpec("tid1"); 
    TabSpec secondTabSpec = tabHost.newTabSpec("tid1"); 
    TabSpec thirdTabSpec = tabHost.newTabSpec("tid1"); 
    /** TabSpec setIndicator() is used to set name for the tab. */ 
    /** TabSpec setContent() is used to set content for a particular tab. */ 
    firstTabSpec.setIndicator("Sales").setContent(new Intent(this,SalesRouteActivity.class)); 
    secondTabSpec.setIndicator("Admin").setContent(new Intent(this,SalesRoutesTab.class)); 
    thirdTabSpec.setIndicator("Setting").setContent(new Intent(this,SalesRoutesTab.class)); 

    /** Add tabSpec to the TabHost to display. */ 
    tabHost.addTab(firstTabSpec); 
    tabHost.addTab(secondTabSpec); 
    tabHost.addTab(thirdTabSpec); 
} 

這是我SalesRouteActivity;

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.sales_routes); 
    ArrayList<Object> routeList = getWmRoute(); 
    ArrayList<String> routhPath = new ArrayList<String>(); 
    for(int i = 0; i<routeList.size();i++){ 
     routhPath.add(((WMRoute) routeList.get(i)).getDescription()); 
    } 

    ArrayAdapter ad = new ArrayAdapter(this,android.R.layout.simple_list_item_single_choice,routhPath); 
    setListAdapter(ad); 
    final ListView list=getListView(); 
    list.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
    list.setItemsCanFocus(true); 
    list.setTextFilterEnabled(true); 
    list.setItemChecked(positions,true); 
    keyword = (String) list.getItemAtPosition(0); 

} 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    menu.add("OK"); 
    menu.add("Cancel"); 
    return super.onCreateOptionsMenu(menu); 
    } 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case 0: 
     Intent showContent = new Intent(getApplicationContext(),ListRetailerActivity.class); 
     Bundle bundle = new Bundle(); 
     bundle.putString("RouteName", keyword); 
     showContent.putExtras(bundle); 
     startActivity(showContent); 
     return true; 
    case 1: 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

這是零售商零件ListRetailerActivity;

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

    Bundle bundle = this.getIntent().getExtras(); 
    String routeName = bundle.getString("RouteName"); 
    setTitle(routeName + " - List Retailer "); 

    ArrayList<Object> routeList = getWmRoute(); 
    // ArrayList<String> routhPath = new ArrayList<String>(); 
    ArrayList<HashMap<String,String>> alist=new ArrayList<HashMap<String,String>>(); 

    for(int i = 0; i<routeList.size();i++){ 
     HashMap<String, String> map = new HashMap<String, String>(); 
     map.put("RetailerCode", ((WMRoute) routeList.get(i)).getDescription()); 
     map.put("RetailerName", ((WMRoute) routeList.get(i)).getBusinessUnit()); 
     alist.add(map); 
    } 

    ListView list=getListView(); 
    sd = new SimpleAdapter(this,alist,R.layout.retalier_rows,new String[]{"RetailerCode","RetailerName"},new int[]{R.id.retailerCode,R.id.retailerName}); 
    list.setAdapter(sd); 
    list.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
    list.setSelected(true); 
    list.setSelection(0); 
    list.setTextFilterEnabled(true); 
    list.setItemsCanFocus(true); 
    list.setTextFilterEnabled(true); 
    list.setItemChecked(positions,true); 
    keyword = ((WMRoute) routeList.get(0)).getBusinessUnit(); 
    //keyword = (String) list.getItemAtPosition(0); 


} 

在這裏我必須表明listActivity & TabActivity.How我們可以實現這一點。

enter image description hereenter image description here

所有孩子的活動需要顯示選項卡視圖。

請幫助我如何調用其他XML以導航與選項卡視圖。

在此先感謝。

+0

可以使用的ActivityGroup,下面是一個例子HTTP ://www.anddev.org/code-snippets-for-android-f33/activity-group-t4752.html –

+0

如果我擴展ActivityGroup,那麼我不能使用TabHost tabHost =(TabHost)findViewById(android.R.id。 tabhost); TabHostProvider tabProvider = new CarmeTabProvider(this); \t \t TabHost tabHosts = tabHost.getTabHost(「Sales」); \t \t tabHost.setCurrentView(R.layout.main); \t \t setContentView(tabHost.render()); 。不是嗎? – Piraba

回答

4

好吧我提供一個演示中,我希望它會幫助你....

所有的

杉杉聲明一個ActivityGroup這樣SalesActivityGroup.java

public class SalesActivityGroup extends ActivityGroup { 

       // Keep this in a static variable to make it accessible for all the nested activities, lets them manipulate the view 
      public static SalesActivityGroup group; 

       // Need to keep track of the history if you want the back-button to work properly, don't use this if your activities requires a lot of memory. 
      private ArrayList<View> history; 

      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        this.history = new ArrayList<View>(); 
        group = this; 

         // Start the root activity withing the group and get its view 
        View view = getLocalActivityManager().startActivity("Home", new 
                Intent(this,SalesRouteActivity.class) 
                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
                .getDecorView(); 

         // Replace the view of this ActivityGroup 
        replaceView(view); 

       } 

      public void replaceView(View v) { 
         // Adds the old one to history 
       history.add(v); 
         // Changes this Groups View to the new View. 
       setContentView(v); 

      } 

      public void back() { 
       if(history.size() > 0) { 
        history.remove(history.size()-1); 
        if(history.size() > 0) { 
         setContentView(history.get(history.size()-1)); 
        } 
        else { 
         finish(); 
        } 
       }else { 
        finish(); 
       } 
      } 

      @Override 
      public void onBackPressed() { 
       SalesActivityGroup.group.back(); 
       return; 
      } 

    } 

在此之後改變你的主機(mainActivity)(更改只有一個則tabspec:firstTabSpec這是關係到銷售我猜)是這樣的...

public class Host extends TabActivity { 

    public static Button btnRed; 
    public static TabHost tabHost; 

    @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.host); 

      tabHost = (TabHost)findViewById(android.R.id.tabhost); 


      TabSpec salesTabSpec = tabHost.newTabSpec("tid1"); 

      Intent intent1 = new Intent(this, SalesActivityGroup.class);//SalesActivityGroup instead of SalesRouteActivity 

      salesTabSpec.setContent(intent2); 

      /* Add tabSpec to the TabHost to display. */ 
      tabHost.addTab(salesTabSpec); 

     } 
} 

後來當過您要開始新的ACTI在firstTab(salesTab)VITY你只需要改變看法的ActivityGroup有關該salesTab

這樣的(啓動listRetailerActivity以下方式)...

Intent intent = new Intent(SalesRouteActivity.this, ListRetailerActivity.class); 

      // Create the view using FirstGroup's LocalActivityManager 
      View view = SalesActivitytGroup.group.getLocalActivityManager() 
      .startActivity("", intent 
        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
        .getDecorView(); 

      // Again, replace the view 
      SalesActivityGroup.group.replaceView(view); 
+0

謝謝。我目前嘗試這部分。如果有任何問題,我會盡快給您回覆 – Piraba

+0

謝謝。它的工作正常。現在我正在調用listRetailer到RetailerOption。它包含其他網格視圖。是否可以這樣做?我正在嘗試那個.. – Piraba

+0

是的,這是可能的;不要啓動該活動bye startActivity()而不是使用SalesActivityGroup.group.replaceView(view);再次使用getDecoreView()返回查看後,如在答案 –