NavigationDrawerFragment не работает с панелью инструментов AppCompat

Я использую NavigationDrawer, созданный по шаблону (при запуске нового проекта). Я пытаюсь добиться совместимости с Material Design, поэтому использую AppCompat v7. Я выполнил эти инструкции, чтобы установите панель инструментов в качестве моей панели действий (т.е. используя setSupportActionBar на моей панели инструментов), и я получаю NPE в своем NavigationDrawerFragment в (внутри onCreateView)

 mDrawerListView.setAdapter(new ArrayAdapter<String>(
            getActionBar().getThemedContext(),
            android.R.layout.simple_list_item_activated_1,
            android.R.id.text1, ...

теперь я подозреваю, что проблемы связаны с методом getActionBar() внутри фрагмента:

   private ActionBar getActionBar() {
    return ((ActionBarActivity) getActivity()).getSupportActionBar();
}

но я понятия не имею, почему - я вызвал setSupportActionBar(toolbar) в Activity onCreate перед вызовом setUp() в NavigationDrawerFragment...

Если кто-нибудь знает, почему это происходит, пожалуйста, помогите!


person Djordje    schedule 26.10.2014    source источник


Ответы (2)


Похоже, проблема заключалась в том, что onCreateView фрагмента вызывался до onCreate активности, и поэтому не было установлено ActionBar. Я только что переместил проблемный код в onActivityCreated фрагмента, и он работает как шарм.

person Djordje    schedule 03.11.2014
comment
не могли бы вы уточнить? - person bunbun; 27.03.2015
comment
@bernlim Конечно. Проблема заключалась в том, что при создании моей активности метод onCreateView фрагмента вызывался до onCreate активности. NPE возникает во фрагменте onCreateView, потому что я пытаюсь получить панель действий, которая в этот момент является нулевой, поскольку onCreate активности еще не был вызван, и поэтому ActionBar еще не был инициализирован/установлен/создан. Имеет ли это смысл? - person Djordje; 03.09.2015

просто замените getActionBar().getThemedContext() на getActivity()

person SooCheng Koh    schedule 31.10.2014
comment
но getActivity() не эквивалентен getActionBar().getThemedContext(), хотя может дать контекст. - person siva; 13.06.2015