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

Android 通过代码打开EditTextPreference(以编程方式),android,android-edittext,preferences,Android,Android Edittext,Preferences,我已使EditTextPreference“textPasscode”依赖于CheckBoxPreference“checkBoxPasscode”。我希望在用户选中复选框后立即打开“textPasscode”。。有可能吗? 如果是,我可以在onSharedPreferenceChanged()函数中使用什么 public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { if(key.conten

我已使EditTextPreference“textPasscode”依赖于CheckBoxPreference“checkBoxPasscode”。我希望在用户选中复选框后立即打开“textPasscode”。。有可能吗? 如果是,我可以在
onSharedPreferenceChanged()
函数中使用什么

public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
    if(key.contentEquals("checkBoxPasscode")){
       // ----some method to open edit text "textPasscode" ??
    }
}

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

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

通过创建警报对话框并处理OK按钮的OnClick事件,可以实现相同的外观和行为

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

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变量以接收用户输入的输入字符串


我希望这有助于为搜索此问题的人节省一些时间。

这个问题令我非常恼火,因此在实施Sandor建议后,我在Android参考中搜索了更好的解决方案,看看我找到了什么。
继承自,该类具有showDialog方法,因此我使用show方法从EditTextPreference创建了一个新类,它的工作方式类似于charme

下面是一些代码:

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

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

在my 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"
/>

注:事实上,我没有使用PreferenceFragment,因为我想要蜂巢前的兼容性,但我认为这段代码没有太大变化。

非常感谢。这肯定会有帮助。我遇到了一个
BadTokenException:有时无法添加window
stacktrace。知道为什么吗?当我离开
首选项活动
然后返回时,似乎会发生这种情况。我猜
context
可能出了问题?这对自定义ListPreference也非常有效。有没有办法在PreferenceActivity之外找到引用?
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    if (key.equalsIgnoreCase(MY_CHECK_BOX)) {
        MyEditTextPreferences myPref = (MyEditTextPreferences) findPreference("myPref");
        myPref.show();
    }
}