0

I've been trying to use selectors in slidingmenu for 2 days without managing to make it work.

Here is what I want to do :

I've a menu which have a ListView in it. I want the selector to point at one particular item and move with the item when the listview is scrolled.

So basically the selector is pointing at the right item but when I'm scrolling, the selector don't move on my phone (android 4.0.4) but it work with the emulator (4.1.2). Do you have any idea of why the menu is not invalidating itself when I ask him to do so ?

    /*Setting the sliding menu */  

        setBehindContentView(R.layout.menu);
        setSlidingActionBarEnabled(true);      



        getSlidingMenu().setMode(SlidingMenu.LEFT);
        getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);

        getSlidingMenu().setFadeEnabled(true);
        getSlidingMenu().setFadeDegree(0.35f);
        getSlidingMenu().setShadowWidth(15);
        getSlidingMenu().setShadowDrawable(R.drawable.shadow);
        getSlidingMenu().setSelectorEnabled(true);
        getSlidingMenu().setSelectorDrawable(R.drawable.selector);

        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);

        getSlidingMenu().setBehindWidth((int) (metrics.widthPixels * 0.8));
        getSlidingMenu().setSelectedView(null);

        /*Creating the content of the sliding menu*/

                    /*Now we generate the menu below */
        maListViewPerso = (ListView) this.findViewById(R.id.listviewperso);

        maListViewPerso = SlidingMenuListCreator.getListView(this, (String) this.getTitle(), maListViewPerso, isMissionSelected, isTourneeOpened);

        getSlidingMenu().setOnOpenListener(new OnOpenListener() {

            @Override
            public void onOpen() {

                                    int wantedPosition = 5; // Whatever position you're looking for
                int firstPosition = maListViewPerso.getFirstVisiblePosition() - maListViewPerso.getHeaderViewsCount();                  int wantedChild = wantedPosition - firstPosition;
                                    if (wantedChild < 0 || wantedChild >= maListViewPerso.getChildCount()) {
                                        } else {
                    selectedView = maListViewPerso.getChildAt(wantedChild);
                                        }

                getSlidingMenu().setSelectedView(selectedView);
                getSlidingMenu().invalidate();



            }
        });

        OnTouchListener mOnTouchListener = new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {


                maListViewPerso.onTouchEvent(event);

                int wantedPosition = 5;                 int firstPosition = maListViewPerso.getFirstVisiblePosition() - maListViewPerso.getHeaderViewsCount();                  int wantedChild = wantedPosition - firstPosition;
                                    if (wantedChild < 0 || wantedChild >= maListViewPerso.getChildCount()) {

                } else {
                    selectedView = maListViewPerso.getChildAt(wantedChild);                 }

                getSlidingMenu().setSelectedView(selectedView);
                getSlidingMenu().getmViewBehind().invalidate();

                                    return true;
            }
        };

        maListViewPerso.setOnTouchListener(mOnTouchListener);
poulpi
  • 101
  • 7

1 Answers1

2

After all I never find the solution.

But :

  1. I switched to a viewpager navigation mode because that what was users preferred (and discovered that, yes, Fragments are awesome)

  2. Google have finally made this navigation pattern "official" by adding it through the support library and drawerlayout and it works very well for me =)

poulpi
  • 101
  • 7