Запустите PreferenceActivity кнопкой меню и завершите кнопкой возврата - PullRequest
2 голосов
/ 21 апреля 2011

Я изменил приложение PrefenceActivity CommonsWare, но столкнулся с проблемой.

Я хотел бы запустить PrefenceActivity с помощью кнопки меню и просто завершить его с помощью кнопки назад.

У меня есть это, чтобы запустить мою prefenceActivity с помощью кнопки меню:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    startActivity(new Intent(this, EditPreferences.class));
    return(true);
}

И это действительно возвращает меня к основному виду приложения, но я думаю, что оно еще не закончено, потому что когда я нажимаюкнопка меню снова prefenceActivity не всплывает снова.Я должен закрыть свое приложение, после чего оно снова работает только 1 раз.

Я уже пытался завершить его в своей prefenceActivity, когда нажимаю кнопку "Назад", но это тоже не помогло.

Что я делаю не так?

Спасибо за помощь!

Ответы [ 2 ]

14 голосов
/ 21 апреля 2011

Если вы просто хотите что-то сделать при нажатии кнопки меню, вы должны просто реализовать onKeyDown () / onKeyUp () для обработки клавиши меню, как и любой другой клавиши. Обязательно верните true, чтобы сказать, что вы его потребляете, чтобы обработка клавиш по умолчанию не выполнялась (обычно это связано с отображением панели меню).

НЕ делайте этого, реализуя onCreateOptionsMenu () или onPrepareOptionsMenu (). Это хуки, которые вы реализуете для взаимодействия с меню параметров , а НЕ с клавишей меню . Нет никакой гарантии, что они будут вызваны в любой связи с нажатой клавишей меню. Бывает, что часто они есть, но в API ничего не определено, говоря, что это так, и действительно, это явно не случай.

Как правило, полагаться на побочные эффекты, подобные этому (о, когда пользователь нажимает клавишу меню, вызывается этот API, который не задокументирован как непосредственно связанный с клавишей меню), это то, чего вам абсолютно следует избегать. Вы по определению полагаетесь на детали реализации, и есть большая вероятность, что это вас укусит.

Например, начиная с Android 3.0, когда есть панель действий, onCreateOptionsMenu () вызывается сразу, когда создается действие, и onPrepareOptionsMenu () вызывается всякий раз, когда необходимо обновить действия в панели действий. Это связано с тем, что меню параметров теперь интегрировано с панелью действий.

3 голосов
/ 21 апреля 2011

Быстрое решение (хотя я не предлагаю это) - использовать

public boolean onPrepareOptionsMenu (Menu menu)

Вызывается при каждом нажатии кнопки меню, прямо перед отображением меню. Проблема с onCreateOptionsMenu в том, что он вызывается только перед первым созданием меню. Так что дело не в том, что упражнение не заканчивается, а в методе, который вы использовали для запуска занятия

...