使用support.v7时preference子画面不开放。preference [英] Preference sub-screen not opening when using support.v7.preference

查看:1444
本文介绍了使用support.v7时preference子画面不开放。preference的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想实现使用AppCompatActivity和support.v7。子屏幕preferences preference

I am trying to implement preferences with sub-screens using AppCompatActivity and support.v7.preference

根据文档,在另一个preferenceScreen用作子画面的每preferenceScreen,而框架点击时会处理显示出来。
http://developer.android.com/guide/topics/ui/settings html的#Subscreens

According to the docs, every PreferenceScreen within another PreferenceScreen functions as a sub-screen, and the framework will handle displaying it when clicked. http://developer.android.com/guide/topics/ui/settings.html#Subscreens

<PreferenceScreen  xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- opens a subscreen of settings -->
    <PreferenceScreen
        android:key="button_voicemail_category_key"
        android:title="@string/voicemail"
        android:persistent="false">
        <ListPreference
            android:key="button_voicemail_provider_key"
            android:title="@string/voicemail_provider" ... />
        <!-- opens another nested subscreen -->
        <PreferenceScreen
            android:key="button_voicemail_setting_key"
            android:title="@string/voicemail_settings"
            android:persistent="false">
            ...
        </PreferenceScreen>
        <RingtonePreference
            android:key="button_voicemail_ringtone_key"
            android:title="@string/voicemail_ringtone_title"
            android:ringtoneType="notification" ... />
        ...
    </PreferenceScreen>
    ...
</PreferenceScreen>

这工作正常使用本地活动,preferenceFragment ......但使用AppCompatActivity和preferenceFragmentCompat,单击preference元素只是强调了它,但不打开子屏幕。

This works fine using native Activity, PreferenceFragment... but using AppCompatActivity and PreferenceFragmentCompat, clicking the Preference element just highlights it, but doesn't open the sub-screen.

我无法找到这样的东西阅读文档和code ...我需要实现任何额外的回调?

I couldn't find anything on this reading the docs and the code... do I need to implement any additional callbacks?

编辑:只是为了完整性......

这工作,并打开子屏幕:

This works and opens the sub-screen:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .replace(android.R.id.content, new DemoPreferenceFragment())
                    .commit();
        }
    }

    static public class DemoPreferenceFragment extends PreferenceFragment {

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
        }
    }
}

这不工作/打开子屏幕:

This doesn't work/open the sub-screen:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .replace(android.R.id.content, new DemoPreferenceFragment())
                    .commit();
        }
    }

    static public class DemoPreferenceFragment extends PreferenceFragmentCompat {

        @Override
        public void onCreatePreferences(Bundle bundle, String s) {
            addPreferencesFromResource(R.xml.preferences);
        }
    }
}


编辑:25/01/2016

support.v7 preference 的几天后摆弄,我在这里总结了我的发现,希望它可以帮助别人:
<一href=\"http://stackoverflow.com/questions/34983932/howto-use-support-v7-$p$pference-with-appcompat-and-potential-drawbacks/34983933#34983933\">HowTo使用support.v7。preference与应用程序兼容性和潜在的弊端

After fiddling with support.v7.preference for a few days, I've summed up my findings here, hoping it may help others: HowTo use support.v7.preference with AppCompat and potential drawbacks

推荐答案

它看起来像preferenceFragmentCompat或文档的错误不足。它有方法onNavigateToScreen当你点击preferenceScreen项目被调用。

It looks like a bug in PreferenceFragmentCompat or insufficiency of docs. It has method onNavigateToScreen which is called when you click on PreferenceScreen item.

但方法getCallbackFragment()返回默认为空,所以你需要重写它在你的片段退货。你也需要实现preferenceFragmentCompat.On preferenceStartScreenCallback。

But method getCallbackFragment() returns null by default, so you need override it in your fragment to return this. Also you need to implement PreferenceFragmentCompat.OnPreferenceStartScreenCallback.

public class SettingsFragment extends PreferenceFragmentCompat implements PreferenceFragmentCompat.OnPreferenceStartScreenCallback {

    public static SettingsFragment newInstance() {
        return new SettingsFragment();
    }

    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        addPreferencesFromResource(R.xml.news_settings);
    }

    @Override
    public Fragment getCallbackFragment() {
        return this;
    }

    @Override
    public boolean onPreferenceStartScreen(PreferenceFragmentCompat preferenceFragmentCompat, PreferenceScreen preferenceScreen) {
        preferenceFragmentCompat.setPreferenceScreen(preferenceScreen);
        return true;
    }
}

但它会导致另一个问题,当你不能回到你最初的preferenceScreen,

But it leads to another problem when you can't get back to your initial PreferenceScreen,

另一种方法是,以取代在这里How从子屏幕到主屏幕在preferenceFragmentCompat?

Another way is to replace fragment which is described here How to move back from Preferences subscreen to main screen in PreferenceFragmentCompat?

这篇关于使用support.v7时preference子画面不开放。preference的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆