我想在我的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);
}
}
答案 0 :(得分:6)
通过创建Interface
类:
public interface HideShowIconInterface{
void showHamburgerIcon();
void showBackIcon();
}
在Interface
:
Activity
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();
答案 1 :(得分:1)
你必须抓住片段数量变化的时刻,并使用此代码隐藏(false)/ show(true)DrawerToggle“Hamburger”
mDrawerToggle.setDrawerIndicatorEnabled(false);
编辑:
在你的Activity(某个地方)你有类似的东西(你改变当前的片段):
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);
答案 2 :(得分:0)
setSupportActionBar(toolbar);
toolbar.setTitle(R.string.app_name);
toolbar.setTitleTextColor(getResources().getColor(R.color.colorWhite));
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
将此代码放入您使用humbarger样式导航的活动中。
答案 3 :(得分:0)
实际上,以上解决方案均无法完全发挥作用。 有几个问题需要考虑 -
a)如果使用ActionBarDrawerToggle
,那么getSupportActionBar().setDisplayHomeAsUpEnabled
现在正在按预期工作 - 它实际上取代了切换图标,但是当切换再次启用时,仍会通过切换加上汉堡包图标来隐藏点击次数
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
}
答案 4 :(得分:-2)
您只需添加
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
有关详细信息,请参阅Android - Switch ActionBar Back Button to Navigation Button。