我想在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版本。
提前致谢。