标签: dialog-preference

如何实现确认(是/否)DialogPreference?

如何实现显示简单是/否确认对话框的首选项?

有关示例,请参阅Browser->Setting->Clear Cache.

android confirmation android-preferences dialog-preference

97
推荐指数
2
解决办法
10万
查看次数

屏幕旋转时,为什么片段不会保留状态?

我在PreferenceFragment中获取一些自定义DialogPreference子类时遇到了一些麻烦,以便在旋转屏幕时保持可见.我在使用PreferenceActivity时没有遇到这个问题,因此我不知道它是Android错误还是代码问题,但我希望有人确认他们是否有相同的体验.

要对此进行测试,首先要创建一个包含至少一个DialogPreference的首选项屏幕(哪个子类无关紧要).然后在PreferenceActivity中显示它.运行应用程序时,请按DialogPreference以显示其对话框.然后旋转屏幕以使方向发生变化.对话框是否仍然可见?

然后尝试相同,但使用PreferenceFragment显示您的首选项而不是PreferenceActivity.再次,旋转屏幕时对话框是否仍然可见?

到目前为止,我发现如果使用PreferenceActivity,对话框将保持可见,但如果使用PreferenceFragment则不会.查看DialogPreference源代码,似乎正确的行为是对话框保持可见,因为在屏幕isDialogShowing重定向时onSaveInstanceState()调用时会保存状态信息.因此,我认为一个错误可能会阻止PreferenceFragment(及其中的所有内容)恢复该状态信息.

如果它是Android错误,那么它具有深远的影响,因为任何使用PreferenceFragment的人都无法保存和恢复状态信息.

有人可以确认吗?如果它不是一个错误,那么发生了什么?

android preferenceactivity android-preferences android-fragments dialog-preference

27
推荐指数
1
解决办法
2万
查看次数

在DialogPreference中获得正面按钮

有没有办法DialogPreference在任何事件中获得a的正面按钮?

我想最初禁用它,并在EditText验证后启用它.

android android-dialog dialog-preference

12
推荐指数
1
解决办法
7721
查看次数

Android:有没有办法从代码中显示DialogPreference?

我想在第一个应用启动时打开一些首选项(通过扩展DialogPreference来创建).此外,这些偏好用作通常的偏好.

有没有办法实现这个?

编辑:

我有我的自定义偏好,如下所示:

public class CitySelectPreference extends DialogPreference  {
// Some code here
}
Run Code Online (Sandbox Code Playgroud)

并且作为解决方案,我希望它从代码中显示,而无需用户进入首选项屏幕.

android android-preferences dialog-preference

10
推荐指数
1
解决办法
1628
查看次数

Alertdialog.Builder setview:调用需要API级别21

我试图在一个扩展DialogPreference的类中运行一个半径NumberPicker,我在使setView()工作时遇到了很多麻烦.让我们从一些代码开始:

public class RadiusPickerPreference extends DialogPreference{
    public RadiusPickerPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    protected void onPrepareDialogBuilder(android.app.AlertDialog.Builder builder) {
        builder.setTitle(R.string.set_radius_dialog_fragment_title);
        builder.setView(R.layout.dialog_radius_picker);
        builder.setPositiveButton(android.R.string.ok, null);
        builder.setNegativeButton(android.R.string.cancel, null);
    }
}
Run Code Online (Sandbox Code Playgroud)

这在builder.setView上给出了一个错误,说"Call需要API 21(当前最小值为15)".我想支持API 15+的设备,因此更改此选项不是一种选择.现在,如果我试图覆盖

protected void onPrepareDialogBuilder(android.support.v7.app.AlertDialog.Builder builder)

相反,它说"方法不会覆盖其超类的方法".

问题是,我该如何设置视图?它不一定必须在onPrepareDialogBu​​ilder()中,只要它支持API 15+.谢谢!

PS:如果您需要更多代码,请告诉我.要将其显示为XML,只需将其添加到<PreferenceScreen>:

<com.example.project.RadiusPickerPreference
    android:id="@+id/radPickerPref"
    android:key="@string/pref_key_default_radius"
    android:title="@string/pref_title_default_radius"/>
Run Code Online (Sandbox Code Playgroud)

java android android-alertdialog dialog-preference

9
推荐指数
1
解决办法
6801
查看次数

如何正确实现DialogPreference子类的onRestoreInstanceState()?

我正在实现我自己的自定义DialogPreference子类,它具有用于持久化整数的SeekBar.我有点困惑什么需要进入onSaveInstanceState()onRestoreInstanceState().具体来说,您是否需要更新用户与之交互的UI小部件(在我的情况下,是SeekBar小部件)onRestoreInstanceState()

我感到困惑的原因是这里的API doc文章告诉你这样做:

@Override
protected Parcelable onSaveInstanceState() {
    final Parcelable superState = super.onSaveInstanceState();
    if (isPersistent()) {
        return superState;
    }

    final SavedState myState = new SavedState(superState);
    myState.value = mNewValue; //<------------ saves mNewValue
    return myState;
}

@Override
protected void onRestoreInstanceState(Parcelable state) {
    if (state == null || !state.getClass().equals(SavedState.class)) {
        super.onRestoreInstanceState(state);
        return;
    }

    SavedState myState = (SavedState) state;
    super.onRestoreInstanceState(myState.getSuperState());
    mNumberPicker.setValue(myState.value); //<------------ updates the UI widget, not mNewValue!
}
Run Code Online (Sandbox Code Playgroud)

但是查看一些官方Android Preference类(EditTextPreferenceListPreference)的源代码,UI小部件不会更新onRestoreInstanceState() …

android state android-widget android-preferences dialog-preference

8
推荐指数
1
解决办法
2156
查看次数

首选创建NumberPicker对话框

我正在尝试在我的首选项屏幕中创建一个NumberPicker对话框.我已经在此之后做了一个:https://stackoverflow.com/a/5533295/2442638

但是,对于我的第二个对话框,我只想要一个微调器,所以我调整了代码如下:

import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.TypedArray;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.View;
import android.widget.NumberPicker;

public class SnoozeTPP extends DialogPreference { 

    private int Minute = 0;
    private NumberPicker np= null;

    public static int getMinute(String time) {
        String[] pieces = time.split(":");

        return (Integer.parseInt(pieces[1]));
    }

    public SnoozeTPP(Context context, AttributeSet attrs) {
        super(context, attrs);

        setPositiveButtonText("Set"); 
        setNegativeButtonText("Cancel"); 
    }

    @Override
    protected View onCreateDialogView() {
        np = new NumberPicker(getContext());

        return (np);
    }

    @Override
    protected void onBindDialogView(View v) {
        super.onBindDialogView(v);

        np.setMaxValue(60);
        np.setValue(Minute);
    } …
Run Code Online (Sandbox Code Playgroud)

android dialog dialog-preference numberpicker

8
推荐指数
1
解决办法
1万
查看次数

DialogPreference导致错误onDisplayPreferenceDialog()

我想创建一个简单的(是/否)对话框首选项,我按照这篇文章中的答案 - 从XML创建一个DialogPreference

但我得到一个错误说

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)
Run Code Online (Sandbox Code Playgroud)

我的XML

  <android.support.v7.preference.PreferenceCategory android:title="History &amp; 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 …
Run Code Online (Sandbox Code Playgroud)

android illegalargumentexception android-preferences android-dialog dialog-preference

8
推荐指数
1
解决办法
1815
查看次数

Android:在DialogPreference摘要中支持%s扩展

第一个问题.很长一段时间的搜索者.

我通过扩展DialogPreference实现了timePicker首选项,就像在android文档中一样.一切正常,我可以通过onSharedPreferenceChanged()和DialogPreference onSetInitialValue()的覆盖来设置摘要.

我的目标是始终使用其值和来自资源的其他字符串显示摘要.
例如,在我的ListPreference中,我有:

android:summary="@string/pref_list_camera_summary"
Run Code Online (Sandbox Code Playgroud)

解析为:

<string name="pref_list_camera_summary">Use camera: %s</string>
Run Code Online (Sandbox Code Playgroud)

在我的timePreference%s不会扩展.我已经四处搜索,我无法弄清楚如何获得dialogPreference/timePreference来做到这一点.我可以在onSetInitalValue()中手动设置摘要,如下所示:

setSummary(getSummary() + " " + DateFormat.getTimeFormat(getContext()).format(new Date(calendar.getTimeInMillis())));
Run Code Online (Sandbox Code Playgroud)

我只是不喜欢这样的暗示扩张.感觉不干净或使用android%s范例.

我将开始挖掘listPreference代码,看看我如何将它添加到dialogPreference.任何想法/先发制人都会很棒!

谢谢!

java string android android-preferences dialog-preference

7
推荐指数
1
解决办法
271
查看次数

带中性按钮的TimePickerDialog

我有一个带有“ TimePreference”类的TimePickerDialog首选项,该类扩展了DialogPreference:

public class TimePreference extends DialogPreference{
...
private TimePicker picker=null;

...
public TimePreference(Context ctxt, AttributeSet attrs){
    super(ctxt, attrs);
    setPositiveButtonText(android.R.string.ok);
    setNegativeButtonText(android.R.string.cancel);
}

@Override
protected View onCreateDialogView(){
    picker=new TimePicker(getContext());
    return(picker);
}
...
}
Run Code Online (Sandbox Code Playgroud)

我想添加第三个按钮,它将把首选项设置为当前时间并关闭对话框,如下所示:

在此处输入图片说明

问题是,是否可以使用TimePickers进行此操作,还是应该自定义AlertDialog?

android dialog-preference android-timepicker

5
推荐指数
1
解决办法
904
查看次数