在我的应用程序中,我想有我的首选项密码保护的部分。没有必要让它们"真正"安全——只是一些设置应该只有在"你知道你在做什么"的情况下才更改(这是一个企业应用程序)。
我的偏好层次是这样的
PreferenceScreen
+-- PreferenceScreen
+-- SettingA
+-- SettingB
+-- PreferenceScreen (this one should be password protected)
+-- SettingC
+-- SettingD
问题是,我找不到任何方法来拦截点击首选项屏幕-我试图覆盖onPreferenceTreeClicked
方法,但没有工作:
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
if(userHasEnteredCorrectPassword) {
return super.onPreferenceTreeClick(preferenceScreen, preference);
} else {
return false;
}
}
显然,因为super.onPreferenceTreeClick(...)
只是开始一个片段,以防首选项设置了它。
我还尝试在PreferenceFragment的onCreate
中设置首选项的onClickListener
-像这样:
findPreference("secure_preference_screen").setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
if(userHasEnteredCorrectPassword) {
return true;
} else {
return false;
}
}
});
但是这也不能拦截点击。
有没有人可能知道如何实现这样的功能?
所以如果用户没有密码就关闭片段。在你能抓住的地方抓住它。这并不重要
您可以通过调用
来处理这个问题override fun onNavigateToScreen(preferenceScreen: PreferenceScreen) {
if (preferenceScreen.key == "protected_screen_key") {
// do noting
} else {
super.onNavigateToScreen(preferenceScreen)
}
}