2012-07-04 3 views
1

Хорошо, у меня есть класс, который наследуется от FragmentManager. Внутри этого класса у меня есть FragmentPagerAdapter, который создает некоторые вкладки фрагментов и вставляет в мою TabHost. Код компилируется и работает. Я поставил некоторые части этих разделов ниже. Я использую, чтобы сделать этот пакет для андроид тыс v4 Поддержка,FragmentManager, LocalActivityManager и TabHost.setup()

public class TabMenu extends FragmentActivity implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener{ 
... 
@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tabs_container); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    tabHost = (TabHost)findViewById(android.R.id.tabhost); 
    tabHost.setup(); 

    viewPager = (ViewPager)findViewById(R.id.viewpager); 

    ... 

    menuAdapter = new MenuPagerAdapter(this, tabHost, viewPager); 
    menuAdapter.addTab("meutime", "Meu Time", MeuTime.class, extras); 
    ... 
    tabHost.setOnTabChangedListener(this); 
    viewPager.setOnPageChangeListener(this); 
      ... 

public class MenuPagerAdapter extends FragmentPagerAdapter{ 
    public MenuPagerAdapter(FragmentActivity fragmentActivity, TabHost tabHost, ViewPager viewPager) { 
     ... 
    } 

    @Override 
    public Fragment getItem(int position) { 
     String currentFragment = tabNames.get(position); 
     return fragmentManager.findFragmentByTag(currentFragment); 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return tabNames.size(); 
    } 

    public void addTab(String tag, String tabLabel, Class<?> cls, Bundle bundle){ 
     TabHost.TabSpec tabSpec = tabHost.newTabSpec(tag).setIndicator(createTab(tabLabel)); 
     Intent intent = new Intent(); 
     intent.setClass(context, cls); 
     intent.putExtras(bundle); 
     tabSpec.setContent(intent); 
     tabNames.add(tag); 
     tabHost.addTab(tabSpec); 
     notifyDataSetChanged(); 
    } 

    private View createTab(String tabLabel){ 
     View view = LayoutInflater.from(context).inflate(R.layout.tab_spec_layout, null, false); 
     ... 
     return view; 
    } 
} 

Когда я создаю экземпляр этого FragmentActivity я получил следующее исключение:

java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager activityGroup)'? 

Чтение на сайте разработчика»Android LocalActivityManager устарела. Но он используется в TabHost.setup (LocalActivityManager). Если этот класс устарел, есть ли решение для этого случая? Я не могу использовать TabContentFactory.

+0

Ум, вам нужны только вкладки с использованием фрагментов, не так ли? Почему вы используете tabhost, намерения и все такое? – Ixx

+0

Используйте тег 'android-fragments' вместо' фрагмента', пожалуйста :) –

ответ

0

Unhapilly Я использовал TabContentFactory. Лично мне не понравилось это решение для создания пустого представления, но оно работает.

public void addTab(String tag, final String tabLabel, Class<?> cls, Bundle bundle){ 
     TabHost.TabSpec tabSpec = tabHost.newTabSpec(tag).setIndicator(createTab(tabLabel)); 
     tabSpec.setContent(new TabHost.TabContentFactory() { 
      public View createTabContent(String tag) { 
       View view = new View(context); 
       view.setMinimumHeight(0); 
       view.setMinimumWidth(0); 
       return view; 
      } 
     }); 

     fragContentInstances.add(new FragContentInfos(cls, bundle)); 
     tabHost.addTab(tabSpec); 
     notifyDataSetChanged(); 
    } 

    private class FragContentInfos{ 
     private Class<?> cls; 
     private Bundle bundle; 
     public FragContentInfos(Class<?> cls, Bundle bundle){ 
      this.cls = cls; 
      this.bundle = bundle; 
     } 
    } 
+0

Если вы ищете вкладку ViewPager, вам следует использовать [ViewPagerIndicator] Джейка Уортона (http://viewpagerindicator.com/) :) –

 Смежные вопросы

  • Нет связанных вопросов^_^