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;
}
}