Добавление 2 скользящих меню к активности

У меня есть действие, в котором с помощью библиотеки скользящих меню я пытаюсь создать 2 скользящих меню. Это код, который я пробовал:

 FragmentTransaction t = this.getSupportFragmentManager().beginTransaction();
    menu = new SlidingMenu(this);
    menu.setMode(SlidingMenu.RIGHT);
    menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);
    menu.setShadowWidthRes(R.dimen.shadow_width);
    menu.setShadowDrawable(R.drawable.shadow);
    menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
    menu.setFadeDegree(0.35f);
    menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
    menu.setMenu(R.layout.tutorial_layout);
    rightSlide = new HelpFragment();
    t.replace(R.id.slidingList2, rightSlide);
    t.commit();
    menu.setSecondaryMenu(R.layout.log_history);
    leftSlide = new LogHistory();
    t.replace(R.id.loghistorycon, leftSlide);
    t.commit();

Теперь я получаю ошибку ANR, и Logcat говорит, что FragmentTransaction t уже был зафиксирован. Я посмотрел пример с: github.com/jfeinstein10/SlidingMenu, и он позволяет ему делать 2 коммита:

 setContentView(R.layout.content_frame);
    getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.content_frame, new SampleListFragment())
    .commit();

    getSlidingMenu().setSecondaryMenu(R.layout.menu_frame_two);
    getSlidingMenu().setSecondaryShadowDrawable(R.drawable.shadowright);
    getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.menu_frame_two, new SampleListFragment())
    .commit();

Что я делаю неправильно? я просто не вижу разницы


person rosu alin    schedule 16.01.2013    source источник
comment
см. этот stackoverflow.com/a/14909076/967548   -  person Omid Nazifi    schedule 29.12.2014


Ответы (2)


Измените приведенный выше код, как показано ниже.

 FragmentTransaction t = this.getSupportFragmentManager().beginTransaction();
    menu = new SlidingMenu(this);
    menu.setMode(SlidingMenu.RIGHT);
    menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);
    menu.setShadowWidthRes(R.dimen.shadow_width);
    menu.setShadowDrawable(R.drawable.shadow);
    menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
    menu.setFadeDegree(0.35f);
    menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
    menu.setMenu(R.layout.tutorial_layout);
    rightSlide = new HelpFragment();
    t.replace(R.id.slidingList2, rightSlide);
    t.commit();
    t = this.getSupportFragmentManager().beginTransaction();
    menu.setSecondaryMenu(R.layout.log_history);
    leftSlide = new LogHistory();
    t.replace(R.id.loghistorycon, leftSlide);
    t.commit();

Для FragmentTransaction у вас может быть только один коммит. В своем коде вы создали объект FragmentTransaction и вызвали фиксацию один раз для rightSlide. Таким образом, t больше не используется для транзакций. Итак, вы создали еще один FragmentTransaction, как это сделал я в приведенном выше коде. Я надеюсь, что это сработает для вас.

person TNR    schedule 16.01.2013
comment
спасибо, это огромный шаг вперед для меня, это работает, но теперь у меня другой вопрос. У меня есть 2 кнопки, по одной на каждое меню, как мне выбрать, какая из них должна открываться первой кнопкой, а затем второй? Я пробовал: menu.showMenu(); меню.переключить(); для первого и для второго: menu.showSecondaryMenu(); меню.переключить(); - person rosu alin; 16.01.2013
comment
@rosualin, ваш второй вопрос сбивает с толку. но скажет, что вы отвечаете. когда у вас есть две кнопки, добавьте один ползунок к одной кнопке, т.е. обработайте нажатие первой кнопки для первого скользящего меню и второе для второго скользящего меню. - person TNR; 16.01.2013
comment
да, я понял это, я сделал clickListeners для кнопок, и как я могу выбрать, какое из этих двух скользящих меню открывать с помощью menu.toggle()? - person rosu alin; 16.01.2013
comment
да, вам нужно использовать menu.toggle() для переключения текущего состояния. - person TNR; 16.01.2013
comment
menu.toggle просто открывает первое скользящее меню, а затем по второй команде закрывает первое скользящее меню. Я пробовал использовать showSecondaryMenu() и showMenu();, но тем не менее обе кнопки просто показывают мне первое меню - person rosu alin; 16.01.2013
comment
@rosualin Какую идею я тебе объяснил. не знаю больше об этом скользящем меню. - person TNR; 16.01.2013
comment
большое спасибо, я продолжу поиск и опубликую ответ, когда найду его, также я приму ваш ответ после того, как выясню, что не так, потому что ответ, который вы мне дали, правильный, но я все еще есть другая проблема, и я думаю, что больше людей рассмотрят вопрос, если на него не ответят. Еще раз спасибо - person rosu alin; 16.01.2013
comment
Мне нужно было поставить: menu.setMode(SlidingMenu.LEFT_RIGHT); чтобы у него было 2 меню - person rosu alin; 16.01.2013
comment
давайте продолжим это обсуждение в чате - person TNR; 17.01.2013
comment
@TNR, у меня проблема со скольжением. то есть, если я добавлю showsecondarymenu() вместо переключения, я становлюсь пустым. Не могли бы вы мне помочь - person Naruto; 20.02.2013

@LLL Следующий код работает правильно для меня. Надеюсь, это поможет вам больше ...

    SlidingMenu slidingMenu  = getSlidingMenu();slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
    slidingMenu.setShadowWidthRes(R.dimen.shadow_width);
    slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
    slidingMenu.setFadeDegree(0.35f);
    slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);
    slidingMenu.setMenu(R.layout.profile);
    slidingMenu.setSecondaryMenu(R.layout.nextactivity);
    Button csButton=(Button)findViewById(R.id.txtx);
    inside csButton onclick listener just need to call slidingMenu.showSecondaryMenu();
    and, Button csButton1=(Button)findViewById(R.id.button1);
    inside csButton1 onclick listener just need to call slidingMenu.showMenu();
person rkv    schedule 03.10.2013