2011-07-26 10 views
4

私はタブビューに問題があります。私は多くのナビゲーションをタブビューで表示する必要があります。例えば ​​。 "Sales"という最初のタブでは、すべての販売ルートを一覧表示します。ユーザーが1つのルートをクリックすると、最初のタブでそのような小売業者のリストに行く必要があります。多くのページ(ビュー)が利用可能です。Androidタブビュー

最初のビューのタブを表示すると、タブをロードするとタブビューで販売ルートの一覧が表示されます。販売ルートをクリックすると、小売店が表示されますが、タブビューは表示されません。

これは私のコードです: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); 


} 

私たちはこれを実装することができますTabActivity.How listActivity &を示さなければなりません。

enter image description hereenter image description here

すべての子アクティビティ]タブのビューを表示する必要があります。

他のxmlをタブビューでナビゲートする方法を教えてください。

ありがとうございます。

+0

...(ちなみに、以下のごlistRetailerActivityを開始する)ことsalesTabこのような

に関連ActivityGroupの表示を変更する必要がfirstTab(salesTab)でVITYは、ここでは一例です。http ://www.anddev.org/code-snippets-for-android-f33/activity-group-t4752.html –

+0

ActivityGroupを拡張すると、TabHost tabHost =(TabHost)findViewById(android.R.id)を使用できなくなります。タブホスト); TabHostProvider tabProvider =新しいCarmeTabProvider(this); \t \t TabHost tabHosts = tabHost.getTabHost( "Sales"); \t \t tabHost.setCurrentView(R.layout.main); \t \t setContentView(tabHost.render()); 。ではない? – Piraba

答えて

4

私はそれはあなたを助けることを願っていますデモ....すべての

ファーズを提供しています[OK]をあなたのホストを変更するには、この後、この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)のような1 ActivityGroup(変更を宣言一つだけ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); 

     } 
} 

その後、あなたは新しいアクチを開始したいとき、これまであなただけのあなたがActivityGroupを使用することができます

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

はい、可能です。そのアクティビティをstartActivity()で始めるのではなく、SalesActivityGroup.group.replaceView(view)を使用してください。再度 –

関連する問題