«Заголовок» Представления и кнопки: как мне прикрепить слушателей к кнопкам в «заголовке», который не имеет своей собственной активности? - PullRequest
2 голосов
/ 06 января 2010

Я затронул этот вопрос здесь , где Кристофер дал на это ответ, но я не совсем понял, поэтому подумал, что пришло время сделать его реальным вопросом, а не просто «продолжением» =)


В существующем приложении, которое я пишу, есть 4 разных экрана: 1. Экран 1 - список узлов (основной экран) 2. Экран 2 - меню настроек, таблица раскладок с кнопками 3. Экран 3 - навигация 4. Экран 4 - текстовая информация о версии и т. Д.

Эти экраны можно перемещать в / из вида «заголовок», расположенного сверху. тогда заголовок имеет 4 разные кнопки:

+--------------------+
| menu with buttons  |
+--------------------+
|                    |
|                    |
|                    |
|  C O N T E N T     |
|                    |
|                    |
|                    |
+--------------------+

Заголовок - это просто XML-файл (header.xml) с несколькими кнопками. Этот header.xml включается в макеты, используя разметку включения. Например, main.xml имеет строку:

<include layout="@layout/header"></include>

Заголовок отображается нормально, но вопрос в том, как правильно подключить OnClickListeners для кнопок в заголовке?

Кристофер указал , что вы можете создать класс Activity и выполнять там хуки, например:

public class BaseActivity extends Activity {
    protected View.OnClickListener mButtonListener;

    protected void setupHeaderButtons() {
        findViewById(R.id.header_btn_1).setOnClickListener(mButtonListener);
        // ...
        findViewById(R.id.header_btn_n).setOnClickListener(mButtonListener);
    }
}

public class FirstActivity extends BaseActivity {
    @Override
    public void onCreate(Bundle b) {
        super.onCreate(b);
        setContentView(R.layout.first_activity);

        // This needs to be done *after* the View has been inflated
        setupHeaderButtons();
    }
}

Во-первых, я не могу заставить его работать, поскольку метод setupHeaderButtons не доступен из FirstActivity. Во-вторых, это правильный путь?

Привет

Ответы [ 3 ]

2 голосов
/ 06 января 2010

Я бы предпочел это, чтобы вам не приходилось помнить (и, вероятно, забывать) вызывать setupHeaderButtons для каждой производной операции.Кстати, установите U pHeaderButtons это лучшее название.

public class BaseActivity extends Activity {
    protected View.OnClickListener mButtonListener;

@Override
public void setContentView(int layoutResID) {
    super.setContentView(layoutResID);
            setupHeaderButtons();
    }

    protected void setupHeaderButtons() {
        findViewById(R.id.header_btn_1).setOnClickListener(mButtonListener);
        // ...
        findViewById(R.id.header_btn_n).setOnClickListener(mButtonListener);
    }
}

public class FirstActivity extends BaseActivity {
    @Override
    public void onCreate(Bundle b) {
        super.onCreate(b);
        setContentView(R.layout.first_activity);
    }
}
2 голосов
/ 06 января 2010

Метод setupHeaderButtons() - protected, поэтому к нему могут обращаться только классы, extend этого базового класса, в данном случае BaseActivity.

Вы уверены, что ваш FirstActivity расширяется BaseActivity?

1 голос
/ 06 января 2010

Лично я не думаю, что вы должны слишком усложнять вещи. Потребуется вызвать setupHeaderButtons, особенно если у вас есть только несколько действий.

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

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