Можно ли использовать один обработчик пользовательского интерфейса для нескольких действий? - PullRequest
0 голосов
/ 26 апреля 2011

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

Ответы [ 3 ]

4 голосов
/ 26 апреля 2011

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

Например:

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);
  }
}
2 голосов
/ 26 апреля 2011

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

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

public class ExternalClickListener implements View.OnClickListener {

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

}

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

btn.setOnClickListener(new ExternalClickListener());
0 голосов
/ 26 апреля 2011

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

...