правильно использовать наследование в Android - PullRequest
2 голосов
/ 09 января 2012

У меня есть «Заголовок» в верхней части 3 списков, который содержит простые кнопки «Создать чтение, обновление» и «Удалить» для редактирования списка.

Как мне подклассифицировать заголовоктак что я могу перезаписать слушателя в TaskHeader, ProjectHeader, ClientsHeader (Subclasses)

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

Обновлено с предлагаемым решением

Интерфейс

import android.view.View.OnClickListener;

public interface AttachClickListeners {

void attachCreateListener(OnClickListener l);
void attachReadListener(OnClickListener l);
void attachUpdateListener(OnClickListener l);
void attachDeleteListener(OnClickListener l);

}

Заголовок

public class Header extends LinearLayout implements AttachClickListeners {
/* removed for shortness */
public void attachCreateListener(OnClickListener listener) {
    insertBtn.setOnClickListener(listener);
}

public void attachReadListener(OnClickListener listener) {
    selectBtn.setOnClickListener(listener);
}

public void attachUpdateListener(OnClickListener listener) {
    updateBtn.setOnClickListener(listener);
}

public void attachDeleteListener(OnClickListener listener) {
    deleteBtn.setOnClickListener(listener);
}

, затем каждый раз, когда я создаю заголовок, я просто передаю другой объект слушателя, как предложено @ elijah

1 Ответ

2 голосов
/ 09 января 2012

если пользовательский интерфейс и поведение могут быть общими, вам не нужно создавать подкласс заголовка.

Вместо этого создайте определения интерфейса для классов слушателей для событий, на которые вы хотите ответить.Например, если вы хотите иметь разные ответы на кнопку «Создать», определите интерфейс onCreateClickedListener, а затем создайте конкретные экземпляры этого интерфейса для каждого представления, в котором существует объект общего заголовка. Вы должны зарегистрировать слушателя;что-то вроде:

createClickedListener = new onCreateClickedListener() {
  @Override
  public void onClick() { ... }
};

header.setOnCreateClickedListener(createClickedListener);

В этом учебном пособии подробно рассматривается тема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...