gpt4 book ai didi

android - 在 Android 上的 PreferenceFragmentCompat 中永远不会调用 onPreferenceStartScreen()

转载 作者:行者123 更新时间:2023-12-04 04:11:11 25 4
gpt4 key购买 nike

关于stackoverflow的第一个问题,请原谅任何不一致之处。

我的 Android 应用程序实现了一个 PreferenceFragmentCompat fragment ,该 fragment 通过在 MainActivity 中单击按钮打开。 “root”PreferenceScreen 中的所有选项都可以顺利运行,但我无法打开任何“子”PreferenceScreen。

经过大量搜索,我发现需要在我的 fragment 中实现 onPreferenceStartScreen 回调,它确实有效!但是现在,我对应用程序进行了相当多的更改,并且一定搞砸了,无法弄清楚是什么。

就这样吧!

其中,我在我的应用程序级别 gradle.build 中实现了这两个库

implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.preference:preference:1.1.1'

这是我的测试 pref3.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:defaultValue="false"
android:key="check_box_preference_1"
android:title="Check box preference" />
<PreferenceScreen android:title="Preference Screen">
<CheckBoxPreference
android:defaultValue="false"
android:key="check_box_preference_2"
android:title="Check box preference" />
</PreferenceScreen>
</PreferenceScreen>

这是我的测试 java Preferences fragment (Common.log 是我的实用程序记录器方法)
public class TestPrefFrag extends PreferenceFragmentCompat implements PreferenceFragmentCompat.OnPreferenceStartScreenCallback {
private static final String TAG = "TestPrefFrag";

@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
Common.log(5, TAG, "onCreatePreferences: started");
setPreferencesFromResource(R.xml.prefs3, rootKey);

}

@Override
public boolean onPreferenceStartScreen(PreferenceFragmentCompat caller, PreferenceScreen preferenceScreen) {
Common.log(5, TAG, "onPreferenceStartScreen: '" + caller.getTag() + "' called for key '" + preferenceScreen.getKey() + "'");
caller.setPreferenceScreen(preferenceScreen);
return true;
}

@Override
public void onNavigateToScreen(PreferenceScreen preferenceScreen) {
Common.log(5, TAG, "onNavigateToScreen: called for key '" + preferenceScreen.getKey() + "'");
//getCallbackFragment();
super.onNavigateToScreen(preferenceScreen);
}

@Override
public boolean onPreferenceTreeClick(Preference preference) {
Common.log(5, TAG, "onPreferenceTreeClick: detected click @ '" + preference.getKey() + "'");
return super.onPreferenceTreeClick(preference);
}
}

当我运行这个
  • 单击根屏幕中的 CheckBoxPreference 调用onPreferenceTreeClick仅限
  • 单击根屏幕中的 PreferenceScreen 调用 onNavigateToScreen然后是 onPreferenceTreeClick但绝不是 onPreferenceStartScreen

  • 不应该 onPreferenceStartScreenonNavigateToScreen 之后立即调用.
    我究竟做错了什么?

    谢谢你的帮助!

    最佳答案

    您需要覆盖 PreferenceFragment方法getCallbackFragment , 像这样

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

    关于android - 在 Android 上的 PreferenceFragmentCompat 中永远不会调用 onPreferenceStartScreen(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61705111/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com