Аномалия с кнопкой «Назад» при использовании <min-sdk> - PullRequest
0 голосов
/ 06 октября 2011

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

<uses-sdk android:minSdkVersion="8" />

в манифест и повторно запустил проект как в эмуляторе, так и в телефоне (HTC Desire). Я заметил, что кнопка «назад» не работает в ряде областей программы. Когда я помещал код в отладку, слушатель onKeyDown запускал OK [и передавал ok в super.onKeyDown(..)], тогда как слушатель onBackPressed вообще не запускал.

Когда я удалил запись uses-sdk из манифеста, все вернулось в нормальное состояние. Может кто-нибудь объяснить, пожалуйста, потому что мне действительно нужно использовать оператор min-sdk.

Обновление: Я экспериментировал вплоть до min-sdk="1" (значение по умолчанию), и эффект тот же. Затем я удалил значение min-sdk и использовал вместо него значение target-sdk с ТОЧНО ОДНОВРЕМЕННЫМИ последствиями, т. Е. Кнопка возврата не будет работать во всех местах. Простое удаление тега <uses-sdk .... /> полностью устраняет эффект, но оставляет меня с проблемой необходимости объявлять минимальное значение SDK перед развертыванием. Пожалуйста, помогите, кто-нибудь, кто-нибудь ...

Ответы [ 2 ]

1 голос
/ 05 января 2013

Может быть, мы встретили ту же проблему. Я использую таким образом , чтобы имитировать программную кнопку возврата, но когда добавляется «min-sdk», кнопка не работает. Похоже, что dispatchKeyEvent и min-sdk находятся в конфликте. Вместо этого я использовал «onBackPressed», он прекрасно работает для меня.

public class BackButtonClickListener implements View.OnClickListener {
    public void onClick(View v) {
        Activity host = (Activity) v.getRootView().getContext();
        host.onBackPressed();
    }
} 
Button back = (Button) findViewById(R.id.your_button_id);
back.setOnClickListener(new BackButtonClickListener());
0 голосов
/ 07 октября 2011

Почему бы не использовать onKeyDown?

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_BACK) {
    // do some stuff
    return true;
  }
  return super.onKeyDown(keyCode, event);
}
...