كيفية قفل درج التنقل عند فتح درج آخر
-
21-12-2019 - |
سؤال
لدي درجين للتنقل في وجهة نظري.أرغب في قفل الدرج الأيسر عندما يكون الدرج الأيمن مفتوحًا، وأرغب في قفل الدرج الأيمن عندما يكون الدرج الأيسر مفتوحًا.
في الوضع الحالي، عندما (على سبيل المثال) يكون الدرج الأيسر مفتوحًا، وتقوم بالتمرير من اليمين لإغلاقه، يبدأ الدرج الأيمن في الفتح قبل إغلاق الدرج الأيسر بالكامل.وهذا ليس السلوك المرغوب فيه.
إليك ما حاولت، ولكنني أحصل على 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);
}
هذا يجب أن يعمل.اسمحوا لي أن أعرف إذا رأيت أي مشكلة.