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

我已经使EditTextPreference'textPasscode'依赖于CheckBoxPreference'checkBoxPasscode'。 我想'textPasscode'打开一旦用户检查checkbox..是否有可能? 如果是这样,我可以在onSharedPreferenceChanged()函数中使用什么?

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

感谢名单

这个问题对我来说很烦人,所以在实现了Sandor的build议之后,我在Android Reference中寻找了更好的解决scheme,看看我find了什么。
EditTextPreference从DialogPreferenceinheritance,这个类有showDialog方法,所以我用Edit方法创build了一个新的类,并且它的工作方式就像一个charme。

这里是一些代码:

 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,因为我想预蜂窝兼容性,但我不认为这个代码改变太多。

我遇到了同样的问题。 我不知道networking上有这么less的search结果是不常见的问题。

看起来,不可能从代码手动显示EditTextPreference,虽然有一个明显的解决方法。

您可以通过创build警报对话框并处理OKbutton的onkekevent来实现相同的外观和行为。

这是一个简单的文本input对话框的通用代码:

 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并处理那里的首选项设置。 不要忘记设置EditTextvariables来接收用户input的inputstring。

我希望这有助于节省一些search这个问题的人。