Есть причины не использовать R.id . в качестве идентификатора в моем коде?

#android

#Android

Вопрос:

Есть ли какая-либо причина не использовать R.id .<id_name> в качестве константы в моем коде?

Например, в моем ids.xml файл, который у меня есть:

 <item name="status_running" type="id"/>
<item name="status_finished" type="id"/>
<item name="status_error" type="id"/>
  

что позволяет мне делать такие вещи, как:

 switch (status) {
    case R.id.status_running:
         mProgressTextView.setText("Running");
         break;
    case R.id.status_finished:
         mProgressTextView.setText("Finished");
         setNextSyncTime();
         break;
    case R.id.status_error:
         mProgressTextView.setText("Error: "   intent.getStringExtra(Intent.EXTRA_TEXT));
         break;
    default:
         break;
}   
  

Есть причины не использовать R.id подобные значения?

Ответ №1:

Использование подобных идентификаторов кажется разумным. Единственной проблемой с вашим примером кода могут быть недавние изменения в системе сборки Android. Идентификаторы ресурсов в библиотечных проектах больше не являются константами и не могут использоваться в операторах switch.

Это повлияло бы на вас, только если бы этот код собирался быть частью проекта библиотеки, по крайней мере, что-то, что следует учитывать.

Смотрите сообщение в блоге Изменения в проектах библиотеки в Android для получения полной информации.

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

1. Ах да — я знал, что где-то читал что-то о том, что они не являются константами. спасибо 🙂

Ответ №2:

Вы пытаетесь получить доступ к значению имени в качестве идентификатора… Вы должны установить значение для id.

Поскольку вы используете список элементов (я полагаю), вы должны получить к нему доступ другим способом.

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

1. Нет — это не зависит ни от какого пользовательского интерфейса. идентификатор — это значение int в R.java файл, и я использую это значение int в качестве идентификатора в моем коде. Я хочу знать, есть ли какая-либо причина, по которой я не знаю, почему я не должен этого делать, вместо того, чтобы писать код типа final static int something = 0x4;

Ответ №3:

Пока вы не сохраняете его в базе данных, это просто константа int, как и любая другая. Но если вы сохраните это значение (например, file или db), вы можете столкнуться с проблемами, поскольку значения идентификатора AFAIK могут меняться между сборками.