2012-07-04 2 views
1

자, FragmentManager에서 상속 한 클래스가 있습니다. 이 클래스 안에는 조각 탭을 만들고 내 TabHost에 삽입하는 FragmentPagerAdapter가 있습니다. 코드가 잘 컴파일되고 작동합니다. 나는 아래의 일부 수업을 들었습니다. FragmentManager, LocalActivityManager 및 TabHost.setup()

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

은 안드로이드 개발자 사이트에 읽는 LocalActivityManager가되지 않습니다 :이 THS 안드로이드 supprt 패키지 V4

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를 인스턴스화 할 때를 어떻게 사용하고 있습니다. 하지만 TabHost.setup (LocalActivityManager)에서 사용됩니다. 이 클래스가 사용되지 않는 경우이 경우에 대한 해결책이 있습니까? TabContentFactory를 사용할 수 없습니다.

+0

음, 조각을 사용하는 탭이 필요합니다. 맞습니까? 왜 당신은 tabhost, 의도 및 모든 것을 사용하고 있습니까? – Ixx

+0

'fragment '대신에'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를 찾으려면 Jake Wharton의 ['ViewPagerIndicator'] (http://viewpagerindicator.com/) :)을 사용해야합니다. –

관련 문제