我使EditTextPreference'textPasscode'依赖于CheckBoxPreference'checkBoxPasscode'。我想在用户选中复选框后立即打开'textPasscode'。它甚至可能吗?
如果是,我可以在onSharedPreferenceChanged()
函数中使用什么?
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if(key.contentEquals("checkBoxPasscode")){
// ----some method to open edit text "textPasscode" ??
}
}
答案 0 :(得分:12)
这个问题对我来说非常烦人,所以在实施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,因为我想要预蜂窝兼容性,但我不认为这个代码有太大变化。
答案 1 :(得分:4)
我遇到了同样的问题。 我想知道这不是一个常见的问题,因为网上的搜索结果很少。
虽然有明显的解决方法,但似乎无法从代码中手动显示EditTextPreference。
您可以通过创建警告对话框并处理“确定”按钮的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变量来接收用户输入的输入字符串。
我希望为搜索此问题的人节省一些时间。