4

I have issue in the tab view. I have to show tab view many navigation. For example . In the first tab called "Sales" , It list all sales route.If the user click one route it need to go list of retailer like wise its go in the first tab. There are many pages(views) available.

From my it only show tab in the first view , that means when it load tab, it showed me list of sales routes with tab view. When I click sales route, it display retailer but not appear tab view.

This is my code : 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>

This is my 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);
}

This is my 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);
    }
}

This is retailer part 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);


}

In here i have to show listActivity & TabActivity.How we can implement this.

enter image description here enter image description here

All the child Activity need to show tab view.

Please help me how to call other xml for navigation with tab view.

Thanks in advance.

Piraba
  • 6,974
  • 17
  • 85
  • 135
  • You can use ActivityGroup, Here is an example http://www.anddev.org/code-snippets-for-android-f33/activity-group-t4752.html – Vaibhav Jani Jul 26 '11 at 04:13
  • If I extends ActivityGroup, then I cant use TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost); TabHostProvider tabProvider=new CarmeTabProvider(this); TabHost tabHosts= tabHost.getTabHost("Sales"); tabHost.setCurrentView(R.layout.main); setContentView(tabHost.render()); . Isn't it? – Piraba Jul 26 '11 at 04:38

1 Answers1

3

Ok i am providing a demo i hope it will help you ....

Firs of all declare one ActivityGroup like this 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;  
            }  

  }  

After this change your host(mainActivity)(Change only one TabSpec : firstTabSpec which is related to sales i guess) like this ...

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);

        }
}

Afterward when ever you want to start new Activity in firstTab(salesTab) you just need to change view of ActivityGroup related to that salesTab

like this (start your listRetailerActivity following way )...

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);
Vaibhav Jani
  • 12,428
  • 10
  • 61
  • 73
  • Thank you for. I currently try this part.If there any issue I will get back to you – Piraba Jul 26 '11 at 09:06
  • Thank you. Its working fine. Now I am calling listRetailer to RetailerOption. It contain other grid view.Is it possible to do? I am trying that one.. – Piraba Jul 26 '11 at 09:12
  • Yes it is possible; don't start that Activity bye startActivity() instead of that use SalesActivityGroup.group.replaceView(view); again after retriving view using getDecoreView() as shown in answer – Vaibhav Jani Jul 26 '11 at 09:17
  • I have some issue in the tab navigation : Show last opened screen should be shown when navigate through Tab or Switching between Tab Activity ?How we can do here?Please tell me : http://stackoverflow.com/questions/6936361/tab-activitygroup-show-last-opened-screen-should-be-shown-when-navigate-through... help me – Piraba Aug 12 '11 at 10:53
  • **AFAIK :** the activity groups you created will hold your current activity view will not change unless you change it, therefore while you navigating between tabs the activity groups you assigned to tabs will not change their views will remain as it is – Vaibhav Jani Aug 17 '11 at 05:29