Различное поведение между микросхемами Android и Kitkat при использовании findViewById

#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 объекта и соответствующим образом настроить его.