[英]Navigation Drawer - hamburger menu working but back arrow opens the drawer
[英]Android Hamburger Menu and Back Arrow
我想在我的MainActivity上為用戶提供帶有漢堡包和后退箭頭的屬性導航。
當我只有一個片段集漢堡包,但是如果我在MainActivity上添加了更多片段時,請設置后退箭頭。
我該如何實施?
這是我的實現...
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private Toolbar toolbar;
private DrawerLayout drawer;
private NavigationView navigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setSupportActionBar(toolbar);
final ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
navigationView.setNavigationItemSelectedListener(this);
//TODO: Insert back arrow button if have more than one fragment on backstack
/*getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
int stackHeight = getSupportFragmentManager().getBackStackEntryCount();
if (stackHeight > 0) {
if (getSupportActionBar() != null) {
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toggle.setDrawerIndicatorEnabled(false);
}
} else {
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
toggle.setDrawerIndicatorEnabled(true);
}
}
}
});*/
ActivityUtils.addFragmentToActivity(getSupportFragmentManager(), new ListVeiculoFragment(), R.id.container_main);
}
}
通過創建Interface
類來工作:
public interface HideShowIconInterface{
void showHamburgerIcon();
void showBackIcon();
}
在您的Activity
實施Interface
:
public class YourActivity extends AppCompatActivity implements HideShowIconInterface{
@Override
public void showHamburgerIcon() {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
mActionBarDrawerToggle.setDrawerIndicatorEnabled(true);
}
@Override
public void showBackIcon() {
mActionBarDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
在您的Fragment
,通過以下方式調用您想要的任何內容:
((HideShowIconInterface) getActivity()).showHamburgerIcon();
要么
((HideShowIconInterface) getActivity()).showBackIcon();
您必須抓住片段數發生變化的時刻,並使用此代碼隱藏(false)/顯示(true)DrawerToggle“ Hamburger”
mDrawerToggle.setDrawerIndicatorEnabled(false);
編輯:
在您的活動(某處)中,您會有類似的內容(在其中更改當前片段):
private void selectItem(int position) {
Fragment fragment = new MyFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.content_frame, fragment)
.commit();
}
我將以此更改最后一行:
fragmentManager.beginTransaction()
.replace(R.id.content_frame, fragment)
.addToBackStack(null)
.commit();
然后檢查:
if(fragmentManager.getBackStackEntryCount() > 1) mDrawerToggle.setDrawerIndicatorEnabled(false);
setSupportActionBar(toolbar);
toolbar.setTitle(R.string.app_name);
toolbar.setTitleTextColor(getResources().getColor(R.color.colorWhite));
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
將此代碼放到您的活動中,在其中使用humbarger樣式導航對我有用。
實際上,以上解決方案均無法完全發揮作用。 有幾個問題需要考慮-
a)如果使用ActionBarDrawerToggle
則getSupportActionBar().setDisplayHomeAsUpEnabled
現在可以按預期工作了-它實際上替換了切換圖標,但是單擊仍由切換處理,並且再次啟用切換時,漢堡圖標被隱藏
b)由於片段事務(添加,從后堆棧還原表單)是異步完成的,因此在片段事務完成后必須檢查實際的后堆棧大小-例如,從片段onCreateView
這是對我有用的代碼(在Kotlin中):
override fun onCreate(savedInstanceState: Bundle?) {
// ....
drawerToggle = ActionBarDrawerToggle(
this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
drawer_layout.addDrawerListener(drawerToggle)
drawerToggle.setHomeAsUpIndicator(R.drawable.ic_arrow_back_white)
drawerToggle.syncState()
drawerToggle.setToolbarNavigationClickListener {
// whatever action is needed on homeAsUp click
onBackPressed()
}
//And this method should be called from fragment's onCreateView
fun showUpNavigation() {
drawerToggle.isDrawerIndicatorEnabled=supportFragmentManager.getBackStackEntryCount() <= 1
}
您只需添加
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
有關更多詳細信息,請參見Android-將ActionBar后退按鈕切換到導航按鈕 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.