【发布时间】:2015-12-29 08:45:55
【问题描述】:
我正在尝试使用FragmentTabHost 实现嵌套片段,但是我不断收到setup() 函数的错误。代码如下。
这是我的课程文件
public class ForumFragment extends Fragment{
private FragmentTabHost mTabHost;
public ForumFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_forum,container,false);
mTabHost = (FragmentTabHost) view.findViewById(android.R.id.tabhost);
mTabHost.setup(getActivity(), getChildFragmentManager(),android.R.id.tabcontent);
mTabHost.addTab(mTabHost.newTabSpec("Tab1").setIndicator("DBoard"), DiscussionBoardFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("Tab2").setIndicator("Events"), EventsFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("Tab3").setIndicator("HW Help"), HWHelpFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("Tab4").setIndicator("Classifieds"), ClassifiedsFragment.class, null);
return view;
}
这是我的 XML 文件
<TabHost
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tabhost">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/DBoard"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"></RelativeLayout>
<RelativeLayout
android:id="@+id/Events"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"></RelativeLayout>
<RelativeLayout
android:id="@+id/HWHelp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"></RelativeLayout>
<RelativeLayout
android:id="@+id/Classifieds"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"></RelativeLayout>
</FrameLayout>
</LinearLayout>
这是我收到的错误
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentTabHost.setup(android.content.Context, android.support.v4.app.FragmentManager, int)' on a null object reference
at com.ForumFragment.onCreateView(ForumFragment.java:30)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6897)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
【问题讨论】:
-
使用
R.id.tabhost而不是android.R.id.tabhost -
将其更改为 R.id.tabhost 时出现意外的转换错误
-
而不是
getChildFragmentManager(),您应该使用getSupportFragmentManager()以获得更多帮助,请参阅developer.android.com/reference/android/support/v4/app/… -
该链接是我用作参考的链接,并且使用了 getChildFragmentManager() ..
标签: android android-fragments android-studio fragment-tab-host android-nested-fragment