Подсветка панели навигации

У меня есть навигационный ящик, и я использую селектор, чтобы получить выделенный элемент списка.

<item
    android:state_activated="true"
    android:drawable="@color/pressed_color"/>
<item
    android:drawable="@color/default_color" />

Проблема в том, что я переопределяю обратное нажатие, чтобы изменить мой фрагмент на мой основной элемент следующим образом:

@Override
public void onBackPressed()
{

    onNavigationDrawerItemSelected(0);
    onSectionAttached(1);
    restoreActionBar();

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

    @Override
public void onNavigationDrawerItemSelected(final int position) {
    // update the main content by replacing fragments
  final  FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction()
            .replace(R.id.container, KedvencekFragment.newInstance(position + 1))
                    // .addToBackStack(null)
            .commit();
    if(position==0)
    {
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                fragmentManager.beginTransaction()
                        .replace(R.id.container, KedvencekFragment.newInstance(position + 1))
                       // .addToBackStack(null)
                        .commit();
            }
        }, 250);

    }

и ` public void onSectionAttached (int number) { switch (number) { case 1: mTitle = getString (R.string.title_section1);

            break;
        case 2:
            mTitle = getString(R.string.title_section2);
            break;
        case 3:
            mTitle = getString(R.string.title_section3);
            break;
        case 4:
            mTitle = getString(R.string.title_section4);
            break;
        case 5:
           // mTitle = getString(R.string.title_section5);
            break;
        case 6:
            mTitle = getString(R.string.title_section6);
            break;
    }
}`

person Csabi Vidó    schedule 27.11.2014    source источник
comment
Опубликуйте свой код onNavigationDrawerItemSelected и onSectionAttached   -  person romtsn    schedule 27.11.2014


Ответы (2)


ИЗМЕНИТЬ:

Вы можете получить доступ к вам NavigationDrawerFragment в своей деятельности, вам просто нужно сделать свой selectItem(int position) метод NavigationDrawerFragment общедоступным, например:

...
publicvoid selectItem(int position) {
    mCurrentSelectedPosition = position;
    if (mDrawerListView != null) {
        mDrawerListView.setItemChecked(position, true);

    }
    if (mDrawerLayout != null) {
        mDrawerLayout.closeDrawer(mFragmentContainerView);
    }
    if (mCallbacks != null) {
        mCallbacks.onNavigationDrawerItemSelected(position);
    }
}
...

А затем в вашем методе onNavigationDrawerItemSelected:

@Override
public void onNavigationDrawerItemSelected(final int position) {
    // update the main content by replacing fragments
  final  FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction()
            .replace(R.id.container, KedvencekFragment.newInstance(position + 1))
                    // .addToBackStack(null)
            .commit();
    if(position==0)
    {
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                fragmentManager.beginTransaction()
                        .replace(R.id.container, KedvencekFragment.newInstance(position + 1))
                       // .addToBackStack(null)
                        .commit();
            }
        }, 250);

    }
    navigationDrawerFragment.selectItem(position);
}
person romtsn    schedule 27.11.2014
comment
но мой mDrawerList находится в моем NavDrawerFragment, поэтому я не могу добраться до него из этого действия: S - person Csabi Vidó; 27.11.2014
comment
dropbox.com/s/gc8vydmo3rgnzic/ и спасибо за помогает :) - person Csabi Vidó; 27.11.2014
comment
Я устал от этого раньше, но проблема в том, что я тоже не могу до него добраться, потому что он не статичен :S - person Csabi Vidó; 27.11.2014
comment
Он не должен быть статичным. Поместите код там, где вы вызываете метод setUp для NavigationDrawerFragment. - person romtsn; 27.11.2014
comment
Где-то вы настраиваете свой объект навигационного ящика, чтобы вы могли использовать этот объект, когда хотите selectItem - person romtsn; 27.11.2014
comment
да, я нашел его в onCreate, его calld mNavigationDrawerFragment .. так что я пытался использовать это: mNavigationDrawerFragment.selectItem(position) в onNavigationDrawerItemSelected, но я получаю исключение Null Pointer - person Csabi Vidó; 27.11.2014
comment
Проверьте свою MainActivity строку 51, там проблема. - person romtsn; 27.11.2014
comment
опубликуйте свой макет xml и метод onCreate - person romtsn; 27.11.2014

я нашел это!!! пришлось изменить selectItem() на общедоступный, а затем вызвать его в onBackPressed вот так!

 @Override
public void onBackPressed()
{
    if(mTitle!=getString(R.string.title_section1)) {
        onNavigationDrawerItemSelected(0);
        onSectionAttached(1);

        mNavigationDrawerFragment.selectItem(0);

        restoreActionBar();
    }
    else{
        super.onBackPressed();
    }


}
person Csabi Vidó    schedule 27.11.2014