2017-03-07 6 views
1

조각으로 빌드 된 응용 프로그램을 디버깅하려고합니다. 조각에 대해 거의 알지 못하기 때문에 몇 가지 문제가 있습니다.DrawerLayout을 조각으로 처리

  1. MainActivity 또는 다른 조각에서 프래그먼트를 열면 동작 버튼이 뒤로 버튼으로 변환되기를 원합니다. 나는 그 일을 좀 해냈다. 그러나 단편에서 뒤로 누르고 다시 시작하면 다시 버튼이 홈 버튼으로 돌아 간다.

  2. 다시 화살표로 변환 할 때 Android에서 뒤로 버튼처럼 작동하는 방법을 알고 싶습니다. 그것은 현재 아무것도하지 않습니다.

    MainActivity를

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
        switch (item.getItemId()) { 
         case R.id.action_trash_all: 
          DataHolder.cart = null; 
          isTrashButtonPresent = false; 
          supportInvalidateOptionsMenu(); 
          inflateFragment(CartFragment.newInstance(null, null)); 
          resolveCircularText(DataHolder.getOverallCartQuantity()); 
          return true; 
         case R.id.btnMyMenu: 
          if (drawer.getDrawerLockMode(GravityCompat.START) 
            ==DrawerLayout.LOCK_MODE_LOCKED_CLOSED) { 
           onBackPressed(); 
          } else { 
           drawerToggle(); 
          } 
          return true; 
         default: 
          return super.onOptionsItemSelected(item); 
        } 
    } 
    
    private void drawerToggle() { 
        if (drawer.isDrawerVisible(GravityCompat.START)) { 
         drawer.closeDrawer(GravityCompat.START); 
        } else { 
         drawer.openDrawer(GravityCompat.START); 
        } 
    } 
    
    private void setupNavigationDrawer() { 
        mDrawerToggle = new ActionBarDrawerToggle(
          this, drawer, toolbar, 
          R.string.navigation_drawer_open,R.string.navigation_drawer_close); 
        mDrawerToggle.setHomeAsUpIndicator(R.drawable.drawer_icon); 
        drawer.addDrawerListener(mDrawerToggle); 
        navigationView.setNavigationItemSelectedListener(this); 
        if (getSupportActionBar() != null) { 
         getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
         getSupportActionBar().setHomeButtonEnabled(true); 
        } 
        setDrawerState(true); 
    } 
    
    public void setDrawerState(boolean isEnabled) { 
        if (isEnabled) { 
         drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, 
         GravityCompat.START); 
         mDrawerToggle.syncState(); 
        } else { 
         drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, 
         GravityCompat.START); 
         //Drawable backButton = ContextCompat.getDrawable(this, 
          R.mipmap.ic_back_button); 
         getSupportActionBar().setHomeAsUpIndicator(null); 
        } 
    } 
    

    조각 :

    에서 OnCreate :

    if (getActivity() != null) { 
         ((MainActivity) getActivity()).setDrawerState(false); 
        } 
    
    @Override 
    public void onDestroy() { 
        super.onDestroy(); 
        if (getActivity() != null) { 
         ((MainActivity) getActivity()).setDrawerState(true); 
        } 
    } 
    
    다음

내가, 당신이 필요로하는 경우 더 제공이 관련이 생각하는 몇 가지 코드

감사합니다. dvance!

+0

나는 당신이 원하는 것을 이해하지 못합니다. 사용자가 수행하는 작업과 각 단계에서 앱이 어떻게 대응해야 하는지를 단계별로 설명 할 수 있습니까? 스크린 샷이나 실물 모형이 많은 도움이됩니다. –

+0

전자 상거래 앱입니다. MainActivity에는 일부 조각 (내 계정, 위시리스트 등)으로 연결되는 버튼이있는 DrawerLayout이 있습니다. 사용자가 단편을 열면 DrawerLayout이 비활성 상태가되고 DrawerLayout 액션 버튼 대신 뒤로 버튼이 표시됩니다. 다시 버튼을 제외하고는 아무 작업도 수행하지 않습니다. 예를 들어 사용자가 휴대 전화의 기본 뒤로 버튼을 누른 상태에서 프래그먼트에서 다른 프래그먼트로 돌아 가면 뒤로 버튼이 사라집니다. 나는 몇 가지 스크린 샷으로 질문을 업데이트 할 것이다. –

+0

질문을 편집해야합니다. –

답변

0

하는 Interface 클래스 사용해보십시오 :

((DrawerViewInterface) getActivity()).showHamburgerIcon(); 
:에 의해 당신이 원하는대로 전화, 당신의 Fragment에서 지금

public class MainActivity extends AppCompactActivity implements DrawerViewInterface { 

    @Override 
    public void lockDrawer() { 
     drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 
    } 

    @Override 
    public void unlockDrawer() { 
     drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); 
    } 

    @Override 
    public void showBackIcon() { 
     mActionBarDrawerToggle.setDrawerIndicatorEnabled(false); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 

    @Override 
    public void showHamburgerIcon() { 
     getSupportActionBar().setDisplayHomeAsUpEnabled(false); 
     mActionBarDrawerToggle.setDrawerIndicatorEnabled(true); 
    } 

} 

: 이제

public interface DrawerViewInterface { 
    void lockDrawer(); 
    void unlockDrawer(); 
    void showBackIcon(); 
    void showHamburgerIcon(); 
} 

를, 당신의 MainActivityInterface 클래스를 구현

또는

((DrawerViewInter) getActivity()).showBackIcon(); 
+0

고마워, 그건 버튼 문제를 해결했다. 하지만 지금은 버거 또는 뒤로 화살표 상태에서 버튼이 작동하지 않는 것처럼 보입니다. –