使用带有选择器的android slidingmenu lib

时间:2013-02-04 14:54:52

标签: java android listener invalidation slidingmenu

我一直试图在slidemenu中使用选择器2天,却没有让它成功。

这是我想要做的:

我有一个菜单里面有一个ListView。我希望选择器指向一个特定项目,并在滚动列表视图时随项目移动。

所以基本上选择器指向正确的项目但是当我滚动时,选择器不会在我的手机上移动(android 4.0.4),但它适用于模拟器(4.1.2)。当我要求他这样做时,你知道为什么菜单不会自动失效吗?

    /*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);

1 个答案:

答案 0 :(得分:2)

毕竟我从未找到解决方案。

但是:

  1. 我切换到了一个viewpager导航模式,因为那是用户首选的(并且发现,是的,片段非常棒)

  2. 谷歌终于制作了这种导航模式&#34;官方&#34;通过支持库和drawerlayout添加它,它对我来说非常好用=)