2017-03-07 54 views
1

我正在尝试调试使用片段构建的应用程序。由于我几乎不知道有关碎片的任何信息,所以我遇到了一些问题。处理DrawerLayout的片段

  1. 我希望在从MainActivity或其他片段打开一个片段时在后退按钮中转换操作按钮。 我有点做了这项工作,但是当我从片段中按回来,它恢复其他的后退按钮转换回主页按钮。

  2. 我想知道如何在Android转换回后退箭头时使主按钮的行为与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类尝试:

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

现在,在您的MainActivity实现此Interface类:

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); 
    } 

} 

现在,在你Fragment,调用任何你想要的:

((DrawerViewInterface) getActivity()).showHamburgerIcon(); 

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

谢谢,这照顾了按钮问题。但现在我似乎无法使按钮在汉堡或后退箭头状态下工作。 –