FragmentTabHostgraphics布局不呈现

简单的android.support.v4.app.FragmentTabHost的graphics布局不会在Eclipse或Android Studio中呈现。
我得到的控制台错误始终如一:
Exception raised during rendering: No tab known for tag null

我正在使用最基本的XML文件:

 <android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TabWidget android:id="@android:id/tabs" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0"/> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="0"/> <FrameLayout android:id="@+id/realtabcontent" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> </LinearLayout> </android.support.v4.app.FragmentTabHost> 

但同样的错误发生。

我只是想添加更多的视图上方或下方的标签小部件和框架布局。
我不太在乎看到标签的内容; 我只想看看我的布局的其余部分但问题是,当一个 android.support.v4.app.FragmentTabHost 驻留在布局 时,没有其他视图呈现

我已阅读并试图解决这个问题的答案:
Android:在FragmentTabHost底部的标签
但我不认为这是我的问题; 我不打算把TabWidget放在底部。

我的XML文件的其他每一个都打开完美。

Android Studio中出现同样的问题:
Android Studio不会渲染这个

我有相同的渲染问题以及编译错误。 我解决了这个问题,发现我在创buildAddtab时没有传递片段。 您必须在mTabHost.addTab上至less传递一个片段。 以下是工作代码。

 private FragmentTabHost mTabHost; mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost); mTabHost.setup(HomeActivity.this, getSupportFragmentManager(), android.R.id.tabcontent); mTabHost.addTab(mTabHost.newTabSpec("home").setIndicator("Home"), HomeFragment.class, null); mTabHost.addTab(mTabHost.newTabSpec("mysheets").setIndicator("MySheets")); mTabHost.addTab(mTabHost.newTabSpec("bookmarks").setIndicator("Bookmarks")); 

不知道你得到的错误(对不起,我现在真的很忙,所以不能花更多时间检查),但总的来说,来自支持库的FragmentTabHost似乎并不关心xml。 看到我以前对另一个问题的回答:

FragmentTabHost与水平滚动

从布局我得到相同的错误..所以,我解决了这个问题只有代码…它工作正常..请试试这个代码

 import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTabHost; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class DetailFragment extends Fragment { /****************************************************************************************************************** * Mandatory empty constructor for the fragment manager to instantiate the fragment (eg upon screen orientation changes). *****************************************************************************************************************/ public DetailFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // R.layout.fragment_tabs_pager contains the layout as specified in your question View rootView = inflater.inflate(R.layout.fragment_tabs_pager, container, false); // Initialise the tab-host FragmentTabHost mTabHost = (FragmentTabHost) rootView.findViewById(R.id.tabhost); mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent); // Initialise this list somewhere with the content that should be displayed List<String> itemsToBeDisplayed; for (String subItem : itemsToBeDisplayed) { // Give along the name - you can use this to hand over an ID for example Bundle b = new Bundle(); b.putString("TAB_ITEM_NAME", subItem); // Add a tab to the tabHost mTabHost.addTab(mTabHost.newTabSpec(subItem).setIndicator(subItem), YourContentFragment.class, b); } return rootView; } } /******************************************************** This class contains the actual content of a single tab **********************************************************/ public class YourContentFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle extras = getArguments(); if (extras != null) { if (extras.containsKey("TAB_ITEM_NAME")) { String subItem = extras.getString("TAB_ITEM_NAME"); // Do something with that string } } } } 

如果你需要在屏幕底部放置零碎的标签… @fallow下面提到 –

让你的XML文件像这样..

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!-- <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> android:layout_alignParentTop="true" --> <FrameLayout android:id="@+id/realtabcontent" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" /> <android.support.v4.app.FragmentTabHost android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="wrap_content" > <FrameLayout android:id="@android:id/tabcontent" android:layout_width="0dip" android:layout_height="0dip" android:layout_weight="0" /> </android.support.v4.app.FragmentTabHost> </LinearLayout> 

现在如果你的关注是打开几个片段与单个分片标签…

@以下步骤::

  1. 创build一个容器片段。 此容器片段将默认用于您所有的标签内容。
  2. 为每个标签内容用这个容器replace片段U需要的。

例如: – 就像你用不同的床单replace你的床.. 🙂

您在不同标签中使用的容器片段类…“LearnContainerFragment.java”

  public class LearnContainerFragment extends BaseContainerFragment { private boolean mIsViewInited; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.e("test", "tab 1 oncreateview"); return inflater.inflate(R.layout.container_fragment, null); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.e("test", "tab 1 container on activity created"); if (!mIsViewInited) { mIsViewInited = true; initView(); } } private void initView() { Log.e("test", "tab 1 init view"); replaceFragment(new Learn(), false); } } 

LearnContainerFragment.java —>它是xml文件container_fragment.xml

  <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/container_framelayout" android:layout_width="match_parent" android:layout_height="match_parent"> </FrameLayout> 

@如何使用Conatiner ..

  1. 对于每个片段U需要将被replace为这个容器片段的ID。

@last你的BaseContainerFragment.java类 –

 public class BaseContainerFragment extends Fragment { public void replaceFragment(Fragment fragment, boolean addToBackStack) { FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); if (addToBackStack) { transaction.addToBackStack(null); } transaction.replace(R.id.container_framelayout, fragment); transaction.commit(); getChildFragmentManager().executePendingTransactions(); } public boolean popFragment() { Log.e("test", "pop fragment: " + getChildFragmentManager().getBackStackEntryCount()); boolean isPop = false; if (getChildFragmentManager().getBackStackEntryCount() > 0) { isPop = true; getChildFragmentManager().popBackStack(); } return isPop; } } 

希望它有助于…..干杯!

不知道….但不应该你的布局在tabwidget的线性布局上面有一个tabhost标签?

 <TabHost android:id="@+id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/background" > 

我做了一个应用程序后,使用tabhost实现的标签,这是我的布局是…一个选项卡有一个日历视图有一个图像切换器,一个有一个列表视图…对不起,我不能有更多的帮助

 <LinearLayout 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:background="@drawable/background" tools:context=".MainActivity" > <TabHost android:id="@+id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/background" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/background" 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" > <LinearLayout android:id="@+id/tab1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </LinearLayout> <LinearLayout android:id="@+id/tab2" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageSwitcher android:id="@+id/imageSwitcher1" android:layout_width="match_parent" android:layout_height="251dp" > </ImageSwitcher> <TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="vertical" /> </LinearLayout> <LinearLayout android:id="@+id/tab3" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <CalendarView android:id="@+id/calendarView1" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> </FrameLayout> </LinearLayout> </TabHost>