小编Pau*_*aul的帖子

在popBackStack之后,ViewPager中的片段未恢复

问题

从另一个片段返回后,片段不会重新附加到其宿主ViewPager.

情况

一个托管片段的活动,其布局包含ViewPager(PageListFragment在下面的示例中).ViewPager由FragmentStateViewPagerAdapter填充.托管内部托管的单个片段(PageFragment在下面的示例中)可以打开包含一组新页面的子页面列表.

行为

只要没有按下后退按钮,一切正常.一旦用户关闭其中一个子页面列表,就会重新创建先前的列表,但不会显示先前显示的页面.在父页面列表中的其他页面上滑动仍然有效.

可以在github上找到示例应用程序:

活动

public class MainActivity extends FragmentActivity {

private static final String CURRENT_FRAGMENT = MainActivity.class.getCanonicalName() + ".CURRENT_FRAGMENT";

public static final String ARG_PARENTS = "Parents";

public void goInto(String mHostingLevel, String mPosition) {
    Fragment hostingFragment = newHostingFragment(mHostingLevel, mPosition);
    addFragment(hostingFragment);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    addBaseFragment();
}

private void addBaseFragment() {
    Fragment hostingFragment = newHostingFragment("", "");
    addFragment(hostingFragment);
}

private Fragment newHostingFragment(String mHostingLevel, String oldPosition) {
    Fragment …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager

56
推荐指数
2
解决办法
2万
查看次数

主题对话框首选项

我正在使用主题来自定义设置对话框的外观。首选项以XML定义,并以夸大PreferenceFragment。附加片段的方法基本上如开发人员指南中所述

通过应用到托管活动的自定义主题,可以很好地自定义第一个屏幕:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(R.style.Theme_Preferences_Dialog);
    ...
Run Code Online (Sandbox Code Playgroud)

搭配风格:

<style name="Theme.Preferences.Dialog" parent="@android:style/Theme.Holo.Light.Dialog">
    <item name="android:colorBackground">#fff0f0f0</item>
    <item name="android:background">#fff0f0f0</item>
    <item name="android:divider">#ffe0e0e0</item>
    <item name="android:textColorPrimary">#ff555555</item>
    <item name="android:textColorSecondary">#ff808080</item>
    <item name="android:textAppearanceLarge">@style/preferences_large_text</item>
    <item name="android:textAppearanceMedium">@style/preferences_medium_text</item>
</style>
Run Code Online (Sandbox Code Playgroud)

还有一些首选项定义如下:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/pref_title" >
...
<ListPreference
    android:enabled="false"
    android:key="@string/pref_change_workspace_key"
    android:persistent="true"
    android:summary="@string/pref_change_workspace_summary_singel"
    android:title="@string/pref_change_workspace_title" />
...
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)

麻烦的是,打开对话框的所有首选项(如ListPreference)都具有与其余对话框不同的样式。

设置片段的第一级看起来不错:

设置第一级

但是单击其中一个元素会产生错误的结果:

设置第二级

android android-preferences android-theme

6
推荐指数
2
解决办法
4679
查看次数