FragmentTabHost中的PreferenceFragmens不会膨胀

时间:2015-01-07 15:08:48

标签: android fragment-tab-host preferencefragment

我想在PreferenceFraments中放置几个​​FragmentTabHost。基于现有的标准示例,代码如下。

布局XML(部分):

<android.support.v4.app.FragmentTabHost
    android:id="@android:id/tabhost"
    android:layout_width="wrap_content"
    android:layout_height="match_parent" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="480dp"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"/>

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="480dp"
            android:layout_height="0dp"
            android:layout_weight="1" />
    </LinearLayout>

</android.support.v4.app.FragmentTabHost>

主要活动(在onCreate中):

tabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
tabHost.setup(this, getSupportFragmentManager(), android.R.id.tabcontent);
tabHost.addTab(
  tabHost.newTabSpec("t1").setIndicator(getString(R.string.first), null),
  FirstFragment.class, null);
tabHost.addTab(
  tabHost.newTabSpec("t2").setIndicator(getString(R.string.second), null),
  SecondFragment.class, null);

问题:标签主机创建时有2个空标签(仅显示标签),因为(如果我理解正确的话)我认为我应该在相应的{{1}中填充片段方法。

但它们是onCreateView,因此它们会在PreferenceFragments中膨胀:

onCreate

所以,问题我应该在@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); PreferenceManager.setDefaultValues(getActivity(), R.xml.first, false); // this is the method which inflates the layout according to the docs addPreferencesFromResource(R.xml.first); getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } 中写什么才能在标签中获得夸大的偏好?或者也许我应该以某种方式告诉系统首选项屏幕将从XML创建其所有视图?

所有示例都使用onCreateView和自定义资源ID,但在这种情况下应该有系统(库)提供的一些底层布局,以及我不确定标准的inflater是否可以用于偏好布局通过首选项XML进行通胀。

inflater.inflate(layoutResId, ...)

注释的字符串没有帮助(tabcontent保持为空)。此外,通过使用@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // return inflater.inflate(android.R.layout.list_content, container, false); return ???; } ,它建议最低API等级11,但我也使用支持库来支持较旧的Android版本。

提前致谢。

0 个答案:

没有答案