我正在尝试调试使用 fragment 构建的应用程序。由于我对 fragment 几乎一无所知,所以我对它们有一些问题。
当我从 MainActivity 或另一个 fragment 打开 fragment 时,我希望将操作按钮转换为后退按钮。 我有点做到了这一点,但是当我从一个 fragment 按回并恢复另一个 fragment 时,后退按钮会变回主页按钮。
我想知道如何使主页按钮在转换为后退箭头时表现得像 Android 上的后退按钮。目前它什么也不做。
这是一些我认为相关的代码,如果您需要,我会提供更多代码:
主要 Activity
@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);
}
}
fragment :
创建时:
if (getActivity() != null) {
((MainActivity) getActivity()).setDrawerState(false);
}
@Override
public void onDestroy() {
super.onDestroy();
if (getActivity() != null) {
((MainActivity) getActivity()).setDrawerState(true);
}
}
提前谢谢您!
最佳答案
尝试使用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();
关于java - 处理 Fragment 中的 DrawerLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42648701/