#android #view #android-4.0-ice-cream-sandwich #android-4.4-kitkat
#Android #Вид #android-4.0-ice-cream-sandwich #android-4.4-kitkat
Вопрос:
Я обнаружил странное поведение метода findViewById с использованием двух разных устройств (ICS и Kitkat). Я использую действие фрагмента, содержащее пользовательский фрагмент поддержки. Фрагмент добавляется с помощью Android FragmentTransation.
Инициализация во FragmentActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.voting_list_activity);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.activity_layout, new CustomFragment());
transaction.commit();
}
Теперь я раздуваю макет в методе Fragments onCreate и инициализирую ссылки на пользовательский интерфейс. Это работает должным образом как с устройствами, так и с версиями Android.
Инициализация во фрагменте поддержки V4:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_layout, container, false);
initUiReferences(view);
return view;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fragment_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
Но теперь я сталкиваюсь с проблемой, что я не могу найти ссылку на элемент панели действий, используя findViewById() на Android Kitkat. На Android Ice Cream Sandwich этот вызов возвращает правильный вид элемента действия, но на KitKat он возвращает null.
Любые предложения. Заранее спасибо
Редактировать: Это исходные ссылки. Это только инициализирует представление списка внутри фрагмента.
private void initUiReferencesView(View view) {
mListView = (ListView) view.findViewById(R.id.list_view);
mListView...
// This call always returns null on Kitkat
View actionItem = view.findViewById(R.id.action_item);
}
Вызов findViewById для элементов фрагмента работает без каких-либо проблем, но когда я пытаюсь найти элемент панели действий, он возвращает null. Я также попробовал найти ссылку в onResume
или onViewCreated
, но это не решает проблему. Элемент панели действий отображается на дисплее и работает должным образом.
Комментарии:
1. показать код для initUiReferences(просмотр);
2. initUiReferences выглядит следующим образом
onViewCreated
3. Где / когда вы вызываете
findViewById
элементы панели действий? Если вы хотите повлиять на элемент ActionBar после инициализации, вам следует подключитьonPrepareOptionsMenu()
свойActivity
илиFragment
затем найтиMenuItem
по идентификатору из предоставленногоMenu
объекта и соответствующим образом настроить его.