通过代码(以编程方式)打开 EditTextPreference

问题描述 投票:0回答:3

我已经使 EditTextPreference 'textPasscode' 依赖于 CheckBoxPreference 'checkBoxPasscode'。我希望“textPasscode”在用户选中复选框后立即打开。这有可能吗? 如果是,我可以在

onSharedPreferenceChanged()
功能中使用什么?

public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
    if(key.contentEquals("checkBoxPasscode")){
       // ----some method to open edit text "textPasscode" ??
    }
}
android android-edittext preferences
3个回答
13
投票

这个问题对我来说很烦人,所以在实施 Sandor 的建议后,我在 Android Reference 中搜索了更好的解决方案,看看我找到了什么。
EditTextPreference 继承自 DialogPreference 并且这个类有 showDialog 方法,所以我用 show 方法从 EditTextPreference 创建了一个新类,它就像一个魅力。

这里是一些代码:

public class MyEditTextPref extends EditTextPreference {
    //...constructor here....

    public void show() {
        showDialog(null);
    }
}

在我的 settings.xml(我用来生成 ActivitySettings 布局)中我添加了 myEditTextPref

<package.that.contains.MyEditTextPreferences 
    android:key="myPref"
    android:title="@string/pref_title"
    android:summary="@string/pref_summary"
    android:dialogTitle="@string/dialog_title"
    android:dialogMessage="@string/dialog_message"
/>

我做的最后一件事是 PreferenceActivity 中的 onSharedPreferenceChanged 方法

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    if (key.equalsIgnoreCase(MY_CHECK_BOX)) {
        MyEditTextPreferences myPref = (MyEditTextPreferences) findPreference("myPref");
        myPref.show();
    }
}

ps.: 实际上我没有使用 PreferenceFragment 因为我想要 pre-honeycomb 兼容性,但我认为这段代码变化不大。


4
投票

我遇到了同样的问题。 我想知道这不是一个常见问题,网上关于这个的搜索结果很少。

虽然有明显的解决方法,但似乎无法从代码中手动显示 EditTextPreference。

您可以通过创建一个警告对话框并处理 OK 按钮的 onclickevent 来实现相同的外观和行为。

这是文本输入对话框的简单通用代码:

public static EditText showInputDialog(Context context, OnClickListener clickListener, String message)
{
    LayoutInflater factory = LayoutInflater.from(context);
    final View textEntryView = factory.inflate(R.layout.dialogedittext, null);              
    final EditText editText = (EditText)textEntryView.findViewById(id.dialogEditText);
    final AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder     
    .setTitle(message)
    .setView(textEntryView)
    .setPositiveButton("OK", clickListener)
    .setNegativeButton("Cancel", null).show();
    return editText;
}   

只需传入一个 OnClickListener 并在那里处理首选项设置。 不要忘记设置一个 EditText 变量来接收用户输入的输入字符串。

我希望它能帮助搜索这个问题的人节省一些时间。


0
投票

如果你正在使用

androidx.preference.PreferenceFragmentCompat
,你可以简单地

EditTextPreferences myPref = findPreference("myPref");
getPreferenceManager().showDialog(myPref);
© www.soinside.com 2019 - 2024. All rights reserved.