#android #handlers
#Android #обработчики
Вопрос:
Привет, я хочу использовать только один обработчик для более чем одного действия.Могу ли я это сделать?
Комментарии:
1. Что именно вы имели в виду? A
Handler
или aListener
?
Ответ №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. почему это не лучшая идея. Почему обработчик не может быть статичным?