如何在android中更改片段时更改HomeButton?

时间:2016-05-20 09:02:59

标签: android

我正在开发一个应用程序,其中我有一个片段“A”和片段“B”,我在片段“A”中有一个导航抽屉。当我切换到碎片“B”时我想要的东西我想要导航抽屉图标会改变回来Icon.How我能做到这一点请告诉。

2 个答案:

答案 0 :(得分:1)

第一个:在你的Activity(持有工具栏和主页按钮的那个)中你需要创建一个布尔变量(一个标志)来标记主页按钮是三明治菜单还是背面箭头。

public class TheActivity {
  private boolean backButtonEnabled = false; //starting with the menu icon 
  ...
}

第二:在您的活动(持有工具栏和主页按钮的活动)中,您需要创建一个方法enableBackButton(boolean enable),如果启用该方法会将工具栏主页图标更改为后退箭头为true或三明治菜单(如果启用)为false并设置相应的布尔标志。

public class TheActivity {
  ...
  public void enableBackButton(boolean enable) {
    this.backButtonEnabled = enable;
    if(enable) {
      toolbar.setNavigationIcon(backIcon);
    } else {
      toolbar.setNavigationIcon(sandwichIcon);
    }
  }
}

第三:在片段B(以及其他片段)中,当您到达getActivity().enableBackButton(true/false)onCreateView()时,应致电onDestroyView()。此时,如果您运行该应用程序,您将能够更改片段并查看主页按钮更改而不设置操作。

public class FragmentB {

  @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  
    ((TheActivity)getActivity().enableBackButton(true);
    ...
  }

  @Override
  public void onDestroyView() {
    ((TheActivity)getActivity().enableBackButton(false);
    super.onDestroyView();
  }
}

上次:您需要在onOptionsItemSelected(MenuItem item)中点击主页按钮,具体取决于按钮更改时设置的标记backButtonEnabled

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()){
    case android.R.id.home: {
      if(backButtonEnabled) actionBack(); //desired back action
      else actionSandwich(); //open drawer
      break;
    }
  }
  return super.onOptionsItemSelected(item);
}

我希望这能找到你并帮助你的应用程序! 此致!

答案 1 :(得分:0)

首先:在您的片段中,将这两行添加到onCreateView

    ((MainActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    ((MainActivity) getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);

第二:在您的活动中添加此功能以添加片段

public void addFragment(String title, Fragment fragment) {
    setToolbarTitle(title);
    FragmentUtils.addFragment(this, fragment,
            fragmentContainer, true, null);
    hideToolbarHamburger(true);
}

并记得将汉堡包放回onBackPressed

@Override
public void onBackPressed() {
    if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
        mDrawerLayout.closeDrawer(GravityCompat.START);
    }
    hideToolbarHamburger(false);
}

第三:魔术来了 按照提及的here

添加此代码
public void hideToolbarHamburger(boolean show) {
    if(show) {
        mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
        actionBarDrawerToggle.setDrawerIndicatorEnabled(false);

        if(!mToolBarNavigationListenerIsRegistered) {
            actionBarDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onBackPressed();
                }
            });

            mToolBarNavigationListenerIsRegistered = true;
        }

    } else {
        mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        actionBarDrawerToggle.setDrawerIndicatorEnabled(true);
        actionBarDrawerToggle.setToolbarNavigationClickListener(null);
        mToolBarNavigationListenerIsRegistered = false;
    }
}