Android - Как добавить идентификатор на кнопку "Назад" на панели инструментов?

Для целей автоматического тестирования мне нужно добавить идентификатор в представление кнопки BACK / MENU на панели инструментов.

Я пытался добавить идентификатор с помощью getChildAt а также setId но идентификатор все еще не установлен, когда я проверяю иерархию представления. android.R.id.home идентификатор меню не работает в моем случае. Мне нужен идентификатор, который устанавливается для представления, когда я проверяю иерархию представления с помощью Инспектора макетов. Только тогда идентификатор можно использовать для автоматизированных тестов пользовательского интерфейса.

Не могли бы вы предложить способ сделать это?

3 ответа

Решение

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

private void addIdToBackButton() {
     for (int i = 0; i < toolbar.getChildCount(); i++) {
        View child = toolbar.getChildAt(i);
        if (child instanceof AppCompatImageButton) {
            child.setId(R.id.toolbar_back_button);
            return;
        }
     }
 }

private void setUpActionBar() {
    setSupportActionBar(toolbar);

    ActionBar actionBar = getSupportActionBar();
    actionBar.setTitle("Title");
    actionBar.setDisplayHomeAsUpEnabled(true);
    toolbar.setNavigationOnClickListener(__ -> onBackPressed());

    addIdToBackButton();
}

Кнопка НАЗАД / МЕНЮ на панели инструментов уже имеет идентификатор android.R.id.homeВы можете использовать этот идентификатор

выполнить действие в этом коде ниже

 @Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (item.getItemId() == android.R.id.home) {
        Toast.makeText(context, "Backarrow pressed", Toast.LENGTH_SHORT).show();
        return true;
    }

    return false;
}

Добавьте этот код внизу вашей активности

@Override
    public void onBackPressed() {
        super.onBackPressed();
    }

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_menuname, menu);
        return true;
    }
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Ward/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
            switch (item.getItemId()) {
           case android.R.id.home:
                    finish();
                    return true;
            }
       }
Другие вопросы по тегам