2014-04-11 2 views
1

내 탐색보기 서랍이 2 개 있습니다. 오른쪽 서랍이 열려있을 때 왼쪽 서랍을 잠그고 싶습니다. 왼쪽 서랍이 열려 있으면 오른쪽 서랍을 잠그고 싶습니다.다른 하나가 열려있을 때 탐색 서랍을 잠그는 방법

예를 들어 왼쪽이 열린 경우 오른쪽에서 스 와이프하여 닫으면 왼쪽 서랍이 완전히 닫히기 전에 오른쪽 서랍이 열리기 시작합니다. 이것은 바람직한 행동이 아닙니다.

다음은 시도한 내용이지만 서랍을 스 와이프 할 때 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); 

답변

1

문제는 오른쪽VieW 잠금하지 것입니다. 다른 문제는 DrawerLayout에 대해 Listener 중 하나만 있어야한다는 것입니다. 코드에서 나는 당신이 DrawerLayout

두 청취자 여러분의 LayoutXMLListViewDrawerLayoutDraweropened입니다

(ListView에 대한 layout_gravity 한 다른 end에 대한 start을해야한다)이 있어야이 이해할 수 View ObjectView.equal()과 같은지 확인한 후 다른 쪽을 잠급니다. ListView' and when the 'Drawerclosed이고 다른 하나는 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); 
} 

과 같은 코드

변경합니다. 문제가 있으면 알려주세요.

+0

그랬습니다. 방금 DrawerToggler 헬퍼 클래스에 추가하고'_leftLayout'과'_rightLayout'을 오버로드 생성자에 추가했습니다. 챔피언처럼 작동합니다! –

관련 문제