- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想创建一个简单的(是/否)对话框首选项,我遵循了这篇文章中的答案 - creating a DialogPreference from XML
但是我得到一个错误提示
java.lang.IllegalArgumentException: Tried to display dialog for unknown preference type. Did you forget to override onDisplayPreferenceDialog()?
at android.support.v7.preference.PreferenceFragmentCompat.onDisplayPreferenceDialog(PreferenceFragmentCompat.java:647)
at android.support.v7.preference.PreferenceManager.showDialog(PreferenceManager.java:553)
at android.support.v7.preference.DialogPreference.onClick(DialogPreference.java:262)
at android.support.v7.preference.Preference.performClick(Preference.java:1115)
at android.support.v7.preference.Preference.performClick(Preference.java:1100)
at android.support.v7.preference.Preference$1.onClick(Preference.java:170)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
我的 XML
<android.support.v7.preference.PreferenceCategory android:title="History & privacy">
<com.game.prefs.views.DialogPref
android:key="pref_clear_search"
android:title="Reset Quests"
android:summary="Reset all quest-progress."
android:dialogMessage="Are you sure you wish to reset your quest progress? This action cannot be undone!"
android:positiveButtonText="Clear Quests"
android:negativeButtonText="Cancel"/>
</android.support.v7.preference.PreferenceCategory>
还有我的JAVA代码
public class DialogPref extends DialogPreference {
public DialogPref(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
我做错了什么?
最佳答案
解决方法:在PreferenceFragment.java中重写下面的方法
@Override
public void onDisplayPreferenceDialog(Preference preference) {
if (preference instanceof CustomDialogPreference) {
DialogFragment dialogFragment = DialogPrefFragCompat.newInstance(preference.getKey());
dialogFragment.setTargetFragment(this, 0);
dialogFragment.show(getFragmentManager(), null);
} else super.onDisplayPreferenceDialog(preference);
}
自定义对话框首选项.java
public class CustomDialogPreference extends DialogPreference {
public CustomDialogPreference(Context context) {
this(context, null);
}
public CustomDialogPreference(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.dialogPreferenceStyle);
}
public CustomDialogPreference(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, defStyleAttr);
}
public CustomDialogPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
}
DialogPrefFragCompat.java
public class DialogPrefFragCompat extends PreferenceDialogFragmentCompat {
public static DialogPrefFragCompat newInstance(String key) {
final DialogPrefFragCompat fragment = new DialogPrefFragCompat();
final Bundle bundle = new Bundle(1);
bundle.putString(ARG_KEY, key);
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onDialogClosed(boolean positiveResult) {
if (positiveResult) {
// do things
}
}
}
xml:
<android.support.v7.preference.PreferenceCategory android:title="History & privacy">
<com.game.prefs.views.CustomDialogPreference
android:key="pref_clear_search"
android:title="Reset Quests"
android:summary="Reset all quest-progress."
android:dialogMessage="Are you sure you wish to reset your quest progress? This action cannot be undone!"
android:dialogTitle=""
android:positiveButtonText="Clear Quests"
android:negativeButtonText="Cancel"/>
</android.support.v7.preference.PreferenceCategory>
关于android - DialogPreference 导致错误 onDisplayPreferenceDialog(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45512419/
我有一个 DialogPreference。我想设置它的对话框标题 (setTitle()),但它不起作用。 我的代码: public class RestoreDefaultApperanceDia
我想要完成的事情:在 DialogPreference 显示的消息文本中创建一个可点击的超链接。 到目前为止我的解决方案:关注此主题:link ,我完成了在 DialogPreference 中显示的
我正在尝试创建自定义对话框首选项,它将包含带有两个单选按钮和一个编辑文本的单选组。如果我写类似 尝试创建包含此对话框首选项的 PreferenceActivity 时应用程序中断。 我想我必须将 D
我在我的 Android 应用程序中创建了一个自定义对话框首选项,但我无法弄清楚如何让显示的对话框跨越显示器的整个宽度。 image of dialog with too much space on
我正尝试按如下方式创建对话框首选项 但是当 Activity 运行时它强制关闭并出现以下错误 11-01 01:21:18.820: E/AndroidRuntime(19644): java.la
我有一个这样定义的类 public class MyDialog extends DialogPreference { 并在 preference.xml 中 我的问题是如何以编程方式启动 MyDi
我创建了扩展 DialogPreference 的新 TimeDialogPreference。 在 preferences.xml 我有: 如何从 TimeDialogPreference 类访问
我想在第一次启动应用程序时打开一些首选项(通过扩展 DialogPreference 创建)。此外,这些首选项用作通常的首选项。 有没有办法做到这一点? 编辑: 我有我的自定义偏好,如下所示: pub
我正在开发自定义 DialogPreference。 当用户在对话框外单击时,它会被取消,我需要避免这种情况。 我知道 Dialog 有方法 setCanceledOnTouchOutside(boo
我有一个自定义的 DialogPreference,它只包含一个日期选择器。一切正常,除了对话框有一个巨大的边框和标题,如下所示。 我希望对话框只是日期选择器: 我已经想出了如何通过将窗口标题设置为
我的首选项 Activity 中有一个对话框,定义如下(布局在 xml 中定义): public class DialogPreference extends android.preference.D
我在我的程序中使用 DialogPreference,现在我想使用 DialogPreference 在单击 OK 按钮时重定向到网页。 Preferences.xml:- TimePicke
我根据 this link. 的回答创建了自定义首选项对话框 现在我想在我的 ActivityPreferenceScreen Activity 类中的那个按钮上单击事件。我怎样才能做到这一点? 最佳
我希望我的程序存储远程服务的凭据,这样用户只需在首选项中设置一次就再也不会这样做了。 因此,我将 DialogPreference 子类化,我的类显示了一个漂亮的对话框,其中包含两个用于登录和密码的字
我目前有一个扩展 DialogPreference 的自定义 Dialog 类(这当然是 PreferenceScreen 的一部分)。 此对话框具有处理保存和取消的自定义按钮。因此,我想去掉标准的“
我正在尝试在首选项布局中实现 DialogPreference。不幸的是,下面的代码总是导致强制关闭。 EditTextPreferences 运行良好,但我需要一个简单的对话框。有什么建议吗? 最
尝试编写自定义对话框首选项(NumberPickerDialog)。尽管 android 文档详细介绍了这个主题,但我似乎错过了他们文档中的一些基本构建 block 。 到目前为止,我所拥有的是一个显
我有一个用于 SeekBar 的自定义 DialogPreference。我覆盖 style="@style/Theme.Putio.Dialog" 并从 XML 扩展布局。 问题是,生成的对话框使用
我有一个 DialogPreference,我想避免用户在按“确定”、“取消”等键时关闭它。 我应该怎么做? 编辑: 我试图在创建对话框时触及“确定”按钮以禁用它。但是我做不到:( 最佳答案 解决方法
在我的应用程序中,我使用 Theme.Holo 和 Theme.Holo.Light 没有任何问题。当使用 Holo 主题并且我单击 DialogPreference/ListPreference 时
我是一名优秀的程序员,十分优秀!