未调用Android导航抽屉onDrawerSlide

时间:2015-04-21 09:37:32

标签: android navigation-drawer


我已将以下代码放入导航抽屉 onDrawerSlide 方法,以便在抽屉打开时移动内容。

public void onDrawerSlide(View drawerView, float slideOffset) {
            super.onDrawerSlide(drawerView, slideOffset);
            container.setTranslationX(slideOffset * drawerView.getWidth());
            mDrawerLayout.bringChildToFront(drawerView);
            mDrawerLayout.requestLayout();
        }

除了第一个应用程序运行之外,它几乎总能完美运行 - 我以编程方式打开抽屉,教导用户使用它。 所以,当我打电话

if (!mUserLearnedDrawer && !mFromSavedInstanceState) {
        mDrawerLayout.openDrawer(mFragmentContainerView);
   }

抽屉正在打开,但未调用 onDrawerSlide 我想,原因是某些东西没有足够的时间来装载,但我不知道究竟是什么以及如何逃避这一点。
它在我在运行后几秒钟内通过处理程序调用 openDrawer 时有效,但在UI上看起来很糟糕。

PS。尝试在 onCreate onResume 中调用 openDrawer ,在调用活动时仍然没有结果。

PPS。此外,我无法直接调用 onDrawerSlide - 因为我不知道 slideOffset 值。

2 个答案:

答案 0 :(得分:0)

我认为当您以编程方式打开抽屉以教用户使用它时,您需要使用DrawerLayout.DrawerListener.onDrawerSlide(View drawerView, float slideOffset)Handler来调用AsyncTask,这会及时更改{{1}的值在slideOffset中。
就像:

[0, 1]

然后你这样打电话:

    private Handler mUIHandler = new Handler() {

    public void handleMessage(android.os.Message msg) {
        switch (msg.what) {
        case UPDATE_SLIDING_INDEX:
            double slideOffSet= (double)msg.obj;
            if (slideOffSet> 0.0 && slideOffSet<= 1.0) {
                drawerListener.onDrawerSlide(drawer, slideOffSet);
                Message message = mUIHandler.obtainMessage();
                message.what = UPDATE_SLIDING_INDEX;
                message.obj = slideOffSet- 0.1;
                mUIHandler.sendMessageDelayed(message, 100);
            } else {
                //To do something here.
            }
            break;

        default:
            break;
        }
    }
};

答案 1 :(得分:0)

在以下if条件之前或之后调用mDrawerLayout.setDrawerListener(....);时。

if (!mUserLearnedDrawer && !mFromSavedInstanceState) {
        mDrawerLayout.openDrawer(mFragmentContainerView);
}

如果是之后,显然不会调用onDrawerSlide。

如果是在那之前你应该调试。