0

私は 2 日間、slidingmenu でセレクターを使用しようとしましたが、うまく動作しませんでした。

これが私がやりたいことです:

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);
4

1 に答える 1

2

結局のところ、私は解決策を見つけることはありません。

しかし :

  1. ビューページャー ナビゲーション モードに切り替えたのは、それがユーザーの好みだったからです (そして、そうです、フラグメントが素晴らしいことを発見しました)。

  2. Google は、サポート ライブラリと drawerlayout を介してこのナビゲーション パターンを追加することで、最終的にこのナビゲーション パターンを「公式」にしました。これは私にとって非常にうまく機能します =)

于 2014-07-18T11:27:36.757 に答える