سؤال

لدي درجين للتنقل في وجهة نظري.أرغب في قفل الدرج الأيسر عندما يكون الدرج الأيمن مفتوحًا، وأرغب في قفل الدرج الأيمن عندما يكون الدرج الأيسر مفتوحًا.

في الوضع الحالي، عندما (على سبيل المثال) يكون الدرج الأيسر مفتوحًا، وتقوم بالتمرير من اليمين لإغلاقه، يبدأ الدرج الأيمن في الفتح قبل إغلاق الدرج الأيسر بالكامل.وهذا ليس السلوك المرغوب فيه.

إليك ما حاولت، ولكنني أحصل على NullPointerException عندما أقوم بتمرير الدرج.

// Left Drawer Config
_leftDrawerToggler = new DrawerToggler(this,
                                       _rootViewLayout,
                                       Resource.Drawable.ic_drawer_light,
                                       Resource.String.drawer_open,
                                       Resource.String.drawer_close);

_leftDrawerToggler.DrawerClosed += delegate
    {
        InvalidateOptionsMenu();
        _rootViewLayout.SetDrawerLockMode(DrawerLayout.LockModeUnlocked, _rightDrawerLayout);
    };

_leftDrawerToggler.DrawerOpened += delegate
{
    _leftDrawerList.SetItemChecked(0, true);
    InvalidateOptionsMenu();
    _rootViewLayout.SetDrawerLockMode(DrawerLayout.LockModeLockedClosed, _rightDrawerLayout);
};

_rootViewLayout.SetDrawerShadow(Resource.Drawable.drawer_shadow_dark, (int)GravityFlags.Left);
_rootViewLayout.SetDrawerListener(_leftDrawerToggler);



// Right Drawer Config
_rightDrawerToggler = new DrawerToggler(this,
                                       _rootViewLayout,
                                       Resource.Drawable.ic_drawer_light,
                                       Resource.String.drawer_open,
                                       Resource.String.drawer_close);

_rightDrawerToggler.DrawerClosed += delegate
    {
        InvalidateOptionsMenu();
        _rootViewLayout.SetDrawerLockMode(DrawerLayout.LockModeUnlocked, _leftDrawerLayout);
    };
_rightDrawerToggler.DrawerOpened += delegate
{
    _rightDrawerList.SetItemChecked(0, true);
    InvalidateOptionsMenu();
    _rootViewLayout.SetDrawerLockMode(DrawerLayout.LockModeLockedClosed, _leftDrawerLayout);
};

_rootViewLayout.SetDrawerShadow(Resource.Drawable.right_drawer_shadow_dark, (int)GravityFlags.Right);
_rootViewLayout.SetDrawerListener(_rightDrawerToggler);
هل كانت مفيدة؟

المحلول

القضية هي أن الخاص بك لا قفل الحق VieW.المشكلة الأخرى هي أنك تحتاج إلى أن يكون لديك واحد فقط Listener ل DrawerLayout.من الكود الخاص بك أستطيع أن أفهم أن لديك مستمعين لـ DrawerLayout

لك Layout XML ينبغي أن يكون DrawerLayout مع اثنين ListView (layout_gravity يجب أن يكون ListView start لأحد والآخر end )

عندما Drawer يكون opened تحقق مما إذا كان View Object يساوي View.equal() ، ثم قفل الآخر ListView' and when the 'Drawer يكون closed فتح الآخر ListView.

قم بتغيير الكود الخاص بك مثل هذا

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_drawer_layout);

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mLeftDrawerList = (ListView) findViewById(R.id.left_drawer);
    mRightDrawerList = (ListView) findViewById(R.id.right_drawer);

    mDrawerToggle = new ActionBarDrawerToggle(this,
            mDrawerLayout,R.drawable.ic_drawer,
            R.string.drawer_open,R.string.drawer_close)
    {
        public void onDrawerOpened(View view){
            if(view.equals(mRightDrawerList)) {
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mLeftDrawerList);
            }
            else {
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mRightDrawerList);
            }
            invalidateOptionsMenu();
        }

        public void onDrawerClosed(View view)
        {
            if(view.equals(mRightDrawerList)) {
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, mLeftDrawerList);
            }
            else {
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, mRightDrawerList);
            }
            invalidateOptionsMenu();
        }
    };
    mDrawerLayout.setDrawerListener(mDrawerToggle);
}

هذا يجب أن يعمل.اسمحوا لي أن أعرف إذا رأيت أي مشكلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top