Откройте EditTextPreference с помощью кода (программно)
Я сделал EditTextPreference 'textPasscode' зависимым от CheckBoxPreference 'checkBoxPasscode'. Я хочу, чтобы "textPasscode" открывался, как только пользователь установил флажок. Возможно ли это?
Если это так, что я могу использовать в функции onSharedPreferenceChanged()?
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if(key.contentEquals("checkBoxPasscode")){
// ----some method to open edit text "textPasscode" ??
}
}
Thanx
Ответы
Ответ 1
Эта проблема была очень раздражающей для меня, поэтому, после внедрения предложения Sandor, я искал лучшее решение в Android Reference и посмотрел, что я нашел.
EditTextPreference наследует от DialogPreference, и этот класс имеет метод showDialog, поэтому я сделал новый класс из EditTextPreference с помощью метода show, и он работает как 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"
/>
И последнее, что я сделал, это метод onSharedPreferenceChanged в PreferenceActivity
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equalsIgnoreCase(MY_CHECK_BOX)) {
MyEditTextPreferences myPref = (MyEditTextPreferences) findPreference("myPref");
myPref.show();
}
}
ps: на самом деле я не использую PreferenceFragment, потому что мне нужна совместимость с сотами, но я не думаю, что этот код сильно изменится.
Ответ 2
Я столкнулся с той же проблемой.
Интересно, что это не общий вопрос, так мало результатов поиска по этому поводу в сети.
Похоже, что невозможно отобразить EditTextPreference вручную из кода, хотя есть очевидное обходное решение.
Вы можете добиться такого же внешнего вида и поведения, создав диалоговое окно предупреждения и обработчик события onclickevent кнопки OK.
Это простой общий код для диалогового окна ввода текста:
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, чтобы получить введенную строку ввода.
Надеюсь, это поможет сэкономить время людям, которые ищут эту проблему.