Повторное открытие диалога из EditTextPreference, включенного в PreferenceScreen - PullRequest
1 голос
/ 01 сентября 2011

Я пытаюсь проверить формат ввода для предпочтения editText, в этом случае 24-часовой формат H: mm, и я хочу, чтобы диалоговое окно редактирования снова появлялось, если есть ошибка формата ввода.

Моя идея заключается в том, чтобы использовать прослушиватель OnPreferenceChange, работающий в действии «Настройки», который реализует PreferenceScreen:

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        //check 24 hour format
        SharedPreferences myPreferences = PreferenceManager.getDefaultSharedPreferences(ctx);        
        String startTime= myPreferences.getString(PREF_FLAT_RATE_START, "18:00");

        try{
            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
            Date time = sdf.parse(startTime);
        }catch (Exception e){ //If exception there is a format error...
            Log.v("Settings", "rateTime not properly formatted");

                ---> Re Open Dialog from EditText key = PREF_FLAT_RATE_START <--- 

        }

    }

Возможно ли это?Я уже пытался получить диалог из findViewByid (EDITTEXT), но, поскольку он больше не отображается, когда он запущен, я получаю нулевой указатель: (

Также я не уверен, что это лучший способпроверьте формат ввода для ЧАС и МИНУТ.

Спасибо!

1 Ответ

0 голосов
/ 01 сентября 2011

Наконец, после нескольких часов поиска я сдался и создал частичное решение.Я создал диалог для уведомления пользователя и восстановил настройки по умолчанию для каждого набора FAIL.

Вот что я сделал:

@Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {
        if(key.equals(/**FINAL VALUE**/)){   
            String startTime = sharedPreferences.getString(/**FINAL VALUE**/, "18:00");
            try{
                SimpleDateFormat sdf = new SimpleDateFormat("H:mm");
                sdf.parse(startTime);
            }catch (Exception e){
                Log.v("Settings", "error parsing /**FINAL VALUE**/");
                showDialog(DIALOG_FINAL_INT);
                //Restore the value.
                SharedPreferences myPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                SharedPreferences.Editor myPreferencesEditor = myPreferences.edit();
                myPreferencesEditor.putString(/**FINAL VALUE**/, "18:00");
                myPreferencesEditor.commit();
            }           
        }
}

Обратите внимание, что вы должны зарегистрировать слушателя и отменить регистрацию onStop.Для создания / определения диалога я также сделал:

protected Dialog onCreateDialog(int id) {
        Dialog dialog;
        switch(id) {
        case /**FINAL_INT**/:
            // do the work to define the Dialog
            AlertDialog.Builder builder1 = new AlertDialog.Builder(this);
            builder1.setMessage(R.string.STRINGID)
                   .setCancelable(false)
                   .setNegativeButton("Ok", new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                       }
                   });
            AlertDialog alert1 = builder1.create();
            dialog = alert1;
            break;
[...]

Ссылки:

http://developer.android.com/guide/topics/ui/dialogs.html

http://developer.android.com/reference/android/content/SharedPreferences.html

...