Значок гамбургера в навигационном ящике не отображается в версии 7 ActionBarDrawerToggle

Я пытался создать панель навигации для существующего приложения. Я нашел несколько руководств по этому вопросу, но большинство из них (включая официальное руководство по Android), по-видимому, относится к библиотеке ActionBarDrawerToggle v4, которая устарела. Вместо этого я пытаюсь использовать библиотеку v7, но мой ActionBarDrawerToggle, похоже, не делает того, что документация говорит, что так и должно быть.

Изменить: изменил мой код в соответствии с ответом ниже. Значок гамбургера теперь правильно переключается назад и вперед, но когда пользователь нажимает аппаратную кнопку «Назад», чтобы вернуться к основному фрагменту моего приложения, значок гамбургера полностью исчезает. Почему это происходит?

private void addDrawerItems() {
    String[] itemArray = {"About", "Nearby", "Settings", "Feedback",};
    mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, itemArray);
    mDrawerList.setAdapter(mAdapter);
    mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.d("ContributionsActivity", "Item " + position + " selected");
        }
    });
}

private void setupDrawer() {
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close) {

        /** Called when a drawer has settled in a completely open state. */
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }

        /** Called when a drawer has settled in a completely closed state. */
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }
    };

    mDrawerToggle.setDrawerIndicatorEnabled(true);
    mDrawerLayout.setDrawerListener(mDrawerToggle);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTitle(R.string.title_activity_contributions);
    setContentView(R.layout.activity_contributions);

    //Set up navigation drawer
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
    mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
    mDrawerList = (ListView)findViewById(R.id.drawer_list);
    addDrawerItems();
    setupDrawer();
    ...
    }

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // enabling drawer toggle by clicking on the app icon.
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    } else {
        switch (item.getItemId()) {
            case android.R.id.home:
                if (mediaDetails.isVisible()) {
                    getSupportFragmentManager().popBackStack();
                }
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

person misaochan    schedule 17.08.2016    source источник
comment
попробуйте эту ссылку: stackoverflow.com/questions/26754940/   -  person Damini Mehra    schedule 17.08.2016


Ответы (1)


@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

Вам не хватает состояния синхронизации, добавьте его, и все должно быть в порядке.

person Klawikowski    schedule 17.08.2016
comment
О, вау, спасибо! Приму ответ, когда минимальное время позволит мне :) - person misaochan; 17.08.2016
comment
О, эээ, еще одна проблема: когда пользователь в любой момент нажимает аппаратную кнопку «Назад» и возвращается к основному фрагменту, значок гамбургера исчезает. Почему это происходит? - person misaochan; 17.08.2016
comment
Это может быть конкретный случай в соответствии с вашей иерархией действий/фрагментов. Попробуйте решения по этой ссылке: stackoverflow.com/questions/17258020/ mDrawerToggle.setDrawerIndicatorEnabled(false); ? - person Klawikowski; 17.08.2016
comment
Ах, эта ссылка очень полезна и решает еще одну мою проблему, но я даже не вызывал mDrawerToggle.setDra‌​werIndicatorEnabled(false) в других фрагментах, поэтому, к сожалению, это не решает эту проблему. - person misaochan; 17.08.2016