Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从XML创建对话框首选项_Android_Xml_Preference - Fatal编程技术网

Android 从XML创建对话框首选项

Android 从XML创建对话框首选项,android,xml,preference,Android,Xml,Preference,我一直在尝试使用一个从XML扩展而来的android.preference.DialogPreference,但是文档似乎缺少一些重要的内容,我在任何地方都找不到一个有效的示例。我的XML现在看起来是这样的(我尝试了许多排列,但这似乎是一个合理的最小值): 这一个很奇怪,您需要子类化DialogPreference。子类不需要做任何事情。所以 public class MyDialogPreference extends DialogPreference { public MyDial

我一直在尝试使用一个从XML扩展而来的
android.preference.DialogPreference
,但是文档似乎缺少一些重要的内容,我在任何地方都找不到一个有效的示例。我的XML现在看起来是这样的(我尝试了许多排列,但这似乎是一个合理的最小值):


这一个很奇怪,您需要子类化
DialogPreference
。子类不需要做任何事情。所以

public class MyDialogPreference extends DialogPreference {

    public MyDialogPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

} 

可以实例化。而旧的
对话框首选项
不能。非常奇怪,它们应该是完全相同的东西。

下面是一个如何使用对话框首选项的示例(如您所提到的子类化)

包dk.myapp.views;
导入android.content.Context;
导入android.preference.DialogPreference;
导入android.util.AttributeSet;
/**
*OptionDialogPreference将显示一个对话框,并将保留
*
true
按下正极按钮和
false
*否则。它将保留到xml首选项中指定的android:key。 */ 公共类OptionDialogPreference扩展了DialogPreference{ 公共选项DialogPreference(上下文、属性集属性){ 超级(上下文,attrs); } @凌驾 受保护的无效onDialogClosed(布尔正结果){ super.onDialogClosed(阳性结果); 持久布尔(正结果); } }
preferences.xml应该包含


我有一个res/value包含(尽管上面也可以显式声明键名)

resetQuests
我的首选项活动从onPause执行实际重置。请注意,onStop可能已经太晚了,因为按下back键后不会立即调用onStop:

@覆盖
公共无效暂停(){
SharedPreferences prefs=android.preference.PreferenceManager。
GetDefaultSharedReferences(getBaseContext());
if(prefs.getBoolean(
getResources().getString(R.string.prefKeyResetQuests),false){
//应用重置,然后将pref值设置回false
}
}
或者同等地,因为我们仍在优先活动中:

@覆盖
受保护的void onPause(){
优先任务=
FindReference(getResources().getString(R.string.prefKeyResetQuests));
if(prefreestquests.getSharedReferences()。
getBoolean(prefResetQuests.getKey(),false)){
//应用重置,然后将pref值设置回false
}
}
首先: 创建您自己的类,该类扩展了
DialogPreference
,如下所示:

package com.test.view;

import android.preference.DialogPreference;

public class DialogExPreference extends DialogPreference 
{
    public DialogExPreference(Context oContext, AttributeSet attrs)
    {
        super(oContext, attrs);     
    }
}
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">

    <com.test.view.DialogExPreference
        android:title="@string/title"
        android:dialogMessage="@string/lite"              
                android:negativeButtonText="test"/> 

</PreferenceScreen>
第二: 修改xml文件,如下所示:

package com.test.view;

import android.preference.DialogPreference;

public class DialogExPreference extends DialogPreference 
{
    public DialogExPreference(Context oContext, AttributeSet attrs)
    {
        super(oContext, attrs);     
    }
}
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">

    <com.test.view.DialogExPreference
        android:title="@string/title"
        android:dialogMessage="@string/lite"              
                android:negativeButtonText="test"/> 

</PreferenceScreen>


那没关系。

这是一个很好的信息。只是我不喜欢使用'this.findPreferences',而是使用'this.getContext().getSharedReferences',我如何通过java代码显示此对话框首选项?如果您注意到DialogPreference是一个抽象类,这并不奇怪。我如何以编程方式显示此对话框首选项?