Возможно ли использовать один обработчик пользовательского интерфейса для более чем одного действия?

#android #handlers

#Android #обработчики

Вопрос:

Привет, я хочу использовать только один обработчик для более чем одного действия.Могу ли я это сделать?

Комментарии:

1. Что именно вы имели в виду? A Handler или a Listener ?

Ответ №1:

Чтобы добавить немного к ответу Octavian, у вас фактически будет один класс обработчика, но по одному экземпляру на действие.

Например:

 public class MyHandler extends Handler {
  // Keep a weak reference to the activity owning the handler
  private WeakReference<Activity> activityRef;

  public MyHandler(Activity a) {
    this.activityRef = new WeakReference<Activity>(a);
  }

  public void handleMessage(Message msg) {
    // do your stuff here, for instance, finish the activity
    if (activityRef.get()!=null) {
      activityRef.get().finish();
    }
  }
}
  

Затем в вашем действии:

 public class MyActivity extends Activity {
  protected MyHandler handler;

  public void onCreate() {
    // This is where you'll re-use the handler code
    handler = new MyHandler(this);
  }
}
  

Комментарии:

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

2. Ну, рассуждения идентичны, изменится только расширенный класс или реализованный интерфейс.

3. Спасибо Марвину и Октавиану за предоставленный вами ответ. Теперь я хочу, чтобы через тип фрагмента, например, одно действие было ведущим, а другое — подчиненным.

Ответ №2:

Конечно. Создайте новый класс, который реализует желаемый интерфейс, и создайте его экземпляр там, где это необходимо.

Давайте возьмем OnClickListener в качестве примера. Создайте класс ExternalClickListener .

 public class ExternalClickListener implements View.OnClickListener {

    @Override
    public void onClick(View v) {
        // Do whatever you want.
    }

}
  

Теперь, когда вы хотите установить его на Button , это было бы

 btn.setOnClickListener(new ExternalClickListener());
  

Комментарии:

1. Спасибо Октавиану и Марвину за предоставленный вами ответ. Теперь я хочу, чтобы через тип фрагмента, например, одно действие было ведущим, а другое — подчиненным.

Ответ №3:

Объявите этот обработчик как static и получите к нему доступ: MyClass.myHandler .

Комментарии:

1. почему это не лучшая идея. Почему обработчик не может быть статичным?