Представление вкладки 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>

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

Это моя 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. Как мы можем это реализовать.

введите здесь описание изображениявведите здесь описание изображения

Все дочерние действия должны отображать вкладки.

Пожалуйста, помогите мне, как вызвать другой xml для навигации с вкладкой.

Заранее спасибо.


person Piraba    schedule 26.07.2011    source источник
comment
Вы можете использовать ActivityGroup. Вот пример anddev .org/code-snippets-for-android-f33/   -  person Vaibhav Jani    schedule 26.07.2011
comment
Если я расширяю ActivityGroup, то не могу использовать TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost); TabHostProvider tabProvider=новый CarmeTabProvider(этот); TabHost tabHosts= tabHost.getTabHost(Продажи); tabHost.setCurrentView(R.layout.main); setContentView (tabHost.render()); . Не так ли?   -  person Piraba    schedule 26.07.2011


Ответы (1)


Хорошо, я предоставляю демо, надеюсь, оно вам поможет....

Сначала объявите один 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);

        }
}

Впоследствии, когда вы захотите начать новую активность в firstTab (salesTab), вам просто нужно изменить представление 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);
person Vaibhav Jani    schedule 26.07.2011
comment
Спасибо за. В настоящее время я пробую эту часть. Если возникнут какие-либо проблемы, я свяжусь с вами. - person Piraba; 26.07.2011
comment
Спасибо. Он работает нормально. Теперь я вызываю listRetailer в RetailerOption. Он содержит другой вид сетки. Возможно ли это сделать? Я пробую тот.. - person Piraba; 26.07.2011
comment
Да, это возможно; не запускайте эту активность с помощью startActivity() вместо этого используйте SalesActivityGroup.group.replaceView(view); снова после получения представления с помощью getDecoreView(), как показано в ответе - person Vaibhav Jani; 26.07.2011
comment
У меня есть проблема с навигацией по вкладкам: Показать последний открытый экран должен отображаться при переходе по вкладке или переключении между вкладками? Как мы можем это сделать? Пожалуйста, скажите мне: stackoverflow.com/questions/ 6936361/... помогите мне - person Piraba; 12.08.2011
comment
Насколько мне известно: созданные вами группы действий будут содержать ваше текущее представление действий, которое не изменится, если вы его не измените, поэтому при перемещении между вкладками группы занятий, назначенные вами вкладкам, не изменят свои представления, останутся такими, какими они были является - person Vaibhav Jani; 17.08.2011