1

我想将几个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 个空标签创建的(只显示标签),因为(如果我理解正确的话)我应该在相应的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);
}

所以,问题是我应该写什么onCreateView才能在标签内获得膨胀的偏好?或者我应该以某种方式告诉系统首选项屏幕将从 XML 创建其所有视图?

所有示例都inflater.inflate(layoutResId, ...)与自定义资源 ID 一起使用,但在这种情况下,系统(库)应该提供一些底层布局,而且我不确定标准充气器是否适合来自偏好 XML 的偏好布局充气。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
  // return inflater.inflate(android.R.layout.list_content, container, false);
  return ???;
}

注释字符串没有帮助(tabcontent 保持为空)。此外,通过使用android.R.layout.list_content,它建议最低 API 级别 11,但我使用支持库来支持较旧的 Android 版本。

提前致谢。

4

0 回答 0