Что это за R.id.home?

#android #back-button

#Android #кнопка возврата

Вопрос:

Несколько родительских действий для одного дочернего действия Кнопка возврата панели инструментов

 @Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    int id = item.getItemId();
    if (id == android.R.id.home) {
        onBackPressed();
        return true;
    }
    return super.onOptionsItemSelected(item);
}
  

Я должен переопределить эту функцию для функциональности кнопки «Назад», перезвонить к тому же родительскому действию, из которого вызывается дочерний элемент, но я не понимаю этот код строки:
id == android.R.id.home
Что такое R.id.home ? home представлять для? должен ли я использовать одно и то же R.id.home везде, где мне когда-либо приходилось использовать эту функцию кнопки «Назад» в моем приложении?

Ответ №1:

Вероятно, вы привыкли использовать R.id.whatever для ссылки на идентификаторы, которые вы присвоили представлениям в своем приложении. Предоставление TextView идентификатора label , а затем вы можете найти его, выполнив поиск представления с R.id.label его идентификатором и тому подобное.

Этот R файл создается для вашего приложения на основе ресурсов, которые вы добавили или объявили. Но android.R.id.home это идентификатор в файле Android R — вы можете думать об этом как об отдельном наборе системных ресурсов. Это не будет конфликтовать ни с чем, чему вы присвоили идентификатор «home», потому что это было бы R.id.home вместо.

Когда вы вызываете setHomeButtonEnabled свою панель инструментов, Android добавляет свой собственный значок и присваивает ему внутренний идентификатор android.R.id.home . Это всегда идентификатор для этой кнопки home, и вы можете проверить, была ли она нажата, проверив этот идентификатор при выборе пункта меню.

Комментарии:

1. подробное объяснение! это решило мою путаницу. спасибо @cactustictacs

Ответ №2:

R это способ получить информацию из пакета ресурсов Android. id сообщает ему, что вы хотите id получить от него (вы также можете запросить у него другие вещи, например string , s).

home это фактический идентификатор, который вы запрашиваете. Вероятно, это кнопка, судя по вашему вопросу. Идентификаторы устанавливаются в редакторе представлений.

Окно редактора

Если у вас есть поиск по вашему приложению, вы, вероятно, найдете кнопку с идентификатором home .

Ответ №3:

Очень короткий ответ: способ доступа к ресурсам.
Ресурсами могут быть TextView , Button а также некоторые Strings Drawable изображения.

R.id.home представляет какой-то конкретный ресурс, который есть MentuItem , поэтому таким образом код определяет, MenuItem выбран ли он или нет — в so может быть несколько MenuItem Menu , код определяет, выбрано ли значение MenuItem with id = home или нет.

У вас должно быть что-то вроде этого в вашем Menu HTML-файле:

 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
    android:id="@ id/home"        
    android:title="BlaBlaBla"
/>
...
  

Важное примечание: все ресурсы должны иметь разные идентификаторы (id), чтобы избежать неоднозначного доступа.

Здесь вы можете найти подробную информацию о R с объясненными вариантами использования. Здесь