Ответ 1
в этом нет ничего плохого. Как вы сказали: вам не нужен ваш дополнительный макет R.id.content, поэтому... просто не добавляйте его с помощью setContentView. Об этом даже упоминается в официальной документации ActionBar: http://developer.android.com/guide/topics/ui/actionbar.html#Tabs
В качестве альтернативы, если содержимое вкладки заполнит макет действия, тогда вашей деятельности не требуется макет вообще (вам даже не нужно вызовите setContentView()). Вместо этого вы можете поместить каждый фрагмент в по умолчанию, который вы можете ссылаться на android.R.id.content ID
Если вы разрабатываете только 14+ (из-за родного ActionBar), все должно быть хорошо с ним, но если вы используете поддержку lib, пожалуйста, прочитайте приведенные ниже пункты.
I. Если вы используете версию библиотеки поддержки ниже 19:
Важно следующее: Каков ваш минимальный уровень API, для которого вы разрабатываете?
Если ваше приложение поддерживает API < 14, и вы используете AppCompat, вы должны знать о разных поведении.
android.R.id.content является частью экрана, на котором ваше приложение должно отображать его содержимое.
На native API 14+ Это всего лишь часть ниже ActionBar, потому что эта часть должна отображать содержимое активности.
В AppCompat, где нет активной поддержки ActionBar. android.R.id.content - это контейнер всего экрана приложения. Это означает - в том числе ActionBar, потому что ActionBar эмулируется там и добавляется как стандартная иерархия представлений. Чтобы решить эту проблему, вы должны проверить, находитесь ли вы в API ниже 14 и используете разные идентификаторы: R.id.action_bar_activity_content
Вы можете создать вспомогательный метод для получения правильного id:
public static int getContentViewId() {
return Build.VERSION.SDK_INT>=Build.VERSION_CODES.ICE_CREAM_SANDWICH ? android.R.id.content : R.id.action_bar_activity_content;
}
Итак, если вы разрабатываете 14+, это идеальное решение. Если вы используете пользовательскую реализацию ActionBar (например, AppCompat), вам нужно сделать этот трюк.
II. Если вы используете версию 19 технической поддержки (или больше):
Похоже, что это поведение было исправлено в версии 19 библиотеки поддержки: https://code.google.com/p/android/issues/detail?id=58108#c21
Вы можете видеть, что они заменяют старый R.id.action_bar_activity_content на стандартный android.R.id.content (и старый android.R.id.content с NO_ID) для лучшей совместимости! Поэтому, если вы используете поддержку Lib r19 или больше (или только родную фреймворку), вы можете просто просто android.R.id.content в обоих вариантах: < 14 и 14+:)