Android onOptionsItemSelected (...) слушатель для всех действий - PullRequest
0 голосов
/ 23 февраля 2012

Я хочу написать один обработчик для всех видов деятельности. Но у меня есть одна проблема: я знаю, что для этой задачи я должен унаследовать класс Activity и переопределить этот обработчик следующим образом:

class MyActivity extends Activity {

    // ...

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // ...
    }
}

Но что я должен делать, когда у меня есть некоторые действия, расширенные из Activity, а другие - из MapActivity?

Ответы [ 2 ]

1 голос
/ 23 февраля 2012

Это невозможно, поскольку множественное наследование в Java невозможно, и MapActivity и Activity не могут расширить класс, которым вы управляете.

Вам потребуется метод onOptionsItemSelected(MenuItem item)в каждой из ваших базовых операций, но они могут использовать один и тот же код, если вы вызываете отдельный общий класс.

например,

class BaseActivity extends Activity {
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        MenuHelper.handleOnItemSelected(item);
    }
}

.

class BaseMapActivity extends MapActivity {
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        MenuHelper.handleOnItemSelected(item);
    }
}

.

class MenuHelper {

   public static void handleOnItemSelected(MenuItem item) {
          // do something..
   }

}
0 голосов
/ 23 февраля 2012

Вы можете создать свой класс MyMapActivity, расширяющий MapActivity, и в своей реализации onOptionsItemSelected для этого и другого MyActivity вызвать одну и ту же процедуру.

Или вы можете установить собственный прослушиватель для каждого элемента менюс MenuItem.setOnMenuItemClickListener, и заставьте этого слушателя отправлять события в вашу процедуру.

...