2017-03-07 48 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

謝謝,這照顧了按鈕問題。但現在我似乎無法使按鈕在漢堡或後退箭頭狀態下工作。 –