2010-03-15 2 views
0

Я хотел был бы иметь возможность закрыть диалог editpreference (как показано здесь http://twitpic.com/18ttdp), нажав кнопку «Готово» на клавиатуре.Отклонить диалоговое окно настроек Android на клавиатуре ACTION_DONE нажмите

В настоящее время нажатие кнопки «Готово» просто отменяет клавиатуру, но оставляет диалог.

В других частях моего приложения я использую код, подобный следующему, чтобы перехватить «Done» нажатие клавиши и выполнить действия в моей деятельности:

text.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      if (actionId == EditorInfo.IME_ACTION_DONE) { 
       //do stuff here 
       return true; 
      } 
      return false; 
     } 
    }); 

Однако, я не уверен в том, как сделать этого добиться тот же эффект в моей активности предпочтений или макете xml.

+0

Можете ли вы передать одно и то же событие, которое происходит, когда вы нажимаете кнопку «ОК» в диалоговом окне, когда вы перехватываете нажатие «Готово»? – Feet

+0

Как это сделать? – Damian

+0

Эта ссылка может помочь http://stackoverflow.com/questions/11236264/change-action-of-done-button-on-virtual-keyboard-android/27035143#27035143 – Nepster

ответ

0

Вместо добавления слушателя туда, вы должны сделать что-то похожее на это:

getDialog().setOnKeyListener(new OnKeyListener() { 

    @Override 
    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { 
     dialog.dismiss(); 
     return true; 
    } 
}); 

Этот код будет распускать диалог при нажатии клавиши.

+0

Спасибо, это отклоняет диалог, но не сохраняет стоимость. Если я получаю доступ к общим предпочтениям (SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences (this);) в диалоговом окне и сохраняет значение текстового поля до его увольнения, тогда новое значение сохраняется. Однако, когда вы снова нажимаете на предпочтение, отображается старое значение (оно каким-то образом кэшируется). Мне нужно выйти из экрана настроек, а затем выбрать настройки -> pref_option для нового сохраненного значения, которое будет отображаться. Как исправить эту часть? – Damian

+0

Я должен предупредить вас, что я этого не сделаю. Я чувствую, что это сделает ваш пользовательский интерфейс неинтуитивным. Если вы хотите это сделать, попробуйте добавить что-то вроде persistString (mValue); к этому коду. – Macarse

+0

Я использовал prefs.edit.putString() (persistString - защищенный метод). Как я уже сказал, он действительно сохраняет значение, но старое (кэшированное) значение отображается, если я снова выбираю предпочтение после отклонения диалога (от нажатия на клавиатуре). Возможно ли обновить значение, как только появится диалоговое окно? – Damian

0

У меня была такая же проблема, это то, как я ее решил:

// edit text to get input 
    final EditText input = new EditText(this); 
    //input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); 
    input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE); 
    alert.setView(input); 

    // ok button 
    alert.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      // do stuff 
     } 
    }); 

Для моих потребностей, вход был ряд (отсюда закомментирована линия), но если вы хотите текст использовать то, что есть.

0

Вот как я ее решил:

final EditTextPreference namePref = (EditTextPreference) findPreference("name"); 
    namePref.getEditText().setOnEditorActionListener(new TextView.OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      if(actionId == EditorInfo.IME_ACTION_DONE) { 
       namePref.onClick(null, DialogInterface.BUTTON_POSITIVE); 
       namePref.getDialog().dismiss(); 
       return true; 
      } 
      return false; 
     } 
    }); 

Но вы можете рассмотреть подклассов EditTextPreference вместо этого, так как это OnClick вызов хак, и его реализация может измениться в будущем.

Смежные вопросы