不能将标签添加到片段
问题描述:
我想构建和包含2个片段的活动。我已经构建其中一个,但我希望另一个在其中有选项卡。问题是,我在tabHost上得到一个错误。 addTab();不能将标签添加到片段
这里是我的片段
public class StatisticsFragment extends android.support.v4.app.Fragment {
Context mContext;
FragmentTabHost tabHost;
View rootView;
public StatisticsFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mContext = getActivity().getApplicationContext();
rootView = inflater.inflate(R.layout.fragment_statistics, container, false);
tabHost = (FragmentTabHost) rootView.findViewById(android.R.id.tabhost);
tabHost.setup(getActivity(), getFragmentManager(), android.R.id.tabcontent);
Intent purposeIntent = new Intent(mContext, PurposeTab.class);
FragmentTabHost.TabSpec tabPurpose = tabHost
.newTabSpec("Purpose")
.setIndicator("Purpose")
.setContent(purposeIntent);
Intent priorityIntent = new Intent(mContext, PriorityTab.class);
FragmentTabHost.TabSpec tabPriority = tabHost
.newTabSpec("Priority")
.setIndicator("Priority")
.setContent(priorityIntent);
tabHost.addTab(tabPurpose);
tabHost.addTab(tabPriority);
tabHost.setCurrentTab(1);
return rootView;
}
,这里是我的活动
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StatisticsFragment fragmentStatistics = new StatisticsFragment();
MainPageButtonsFragment fragmentMain = new MainPageButtonsFragment();
getSupportFragmentManager().beginTransaction().add(R.id.fragment_statistics, fragmentStatistics, "Statistics").commit();
getSupportFragmentManager().beginTransaction().add(R.id.main_page_buttons_fragment, fragmentMain, "Buttons").commit();
}
这是我的logcat这表明我的错误是在addTab,甚至认为我可能忘了“的设置方法“ 但我不是!
E/AndroidRuntime: FATAL EXCEPTION: main
E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{}: java.lang.IllegalStateException: Did you forget to call 'public void setup(LocalActivityManager activityGroup)'?
10-06 12:03:56.967 4033-4033/ E/AndroidRuntime: at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:692)
10-06 12:03:56.967 4033-4033/ E/AndroidRuntime: at android.widget.TabHost.setCurrentTab(TabHost.java:358)
10-06 12:03:56.967 4033-4033/ E/AndroidRuntime: at android.widget.TabHost.addTab(TabHost.java:236)
10-06 12:03:56.967 4033-4033/ E/AndroidRuntime: at .StatisticsFragment.onCreateView(StatisticsFragment.java:64)
10-06 12:03:56.967 4033-4033/ E/AndroidRuntime: at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
10-06 12:03:56.967 4033-4033/ E/AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1026)
10-06 12:03:56.967 4033-4033/ E/AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1207)
10-06 12:03:56.967 4033-4033/ E/AndroidRuntime: at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
10-06 12:03:56.967 4033-4033/ E/AndroidRuntime: at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1572)
10-06 12:03:56.967 4033-4033/ E/AndroidRuntime: at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:330)
10-06 12:03:56.967 4033-4033/ E/AndroidRuntime: at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:511)
10-06 12:03:56.967 4033-4033/ E/AndroidRuntime: at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1163)
10-06 12:03:56.967 4033-4033/ E/AndroidRuntime: at android.app.Activity.performStart(Activity.java:5018)
答
最简单的方式,在我看来,对标签添加到任何东西(活动,片段),使用TabLayout由谷歌设计支持库。
在您的布局文件,添加TabLayout和ViewPager:
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@android:color/white"
android:gravity="bottom"
app:tabGravity="fill"
app:tabMode="fixed"/>
--------------------------------------
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
在您的片段/活动文件将它们连接起来,通过调用tabLayout.setupWithViewPager(mPager);
你也应该重写你的getPageTitle方法ViewPagerAdapter:
public static class ViewPagerAdapter extends FragmentStatePagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
private String mTabTitles[] = new String[]{"Tab 1", "Tab 2"};
@Override
public android.support.v4.app.Fragment getItem(int num) {
return MyFragment.newInstance();
}
@Override
public int getCount() {
return mCount;
}
@Override
public CharSequence getPageTitle(int position) {
// Generate title based on item position
return mTabTitles[position];
}
}
你可以参考这个标签http://www.android4devs.com/2015/01/how-to-make-material-design-sliding-tabs.html – Awadesh