gpt4 book ai didi

java - 处理 Fragment 中的 DrawerLayout

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:31 25 4
gpt4 key购买 nike

我正在尝试调试使用 fragment 构建的应用程序。由于我对 fragment 几乎一无所知,所以我对它们有一些问题。

  1. 当我从 MainActivity 或另一个 fragment 打开 fragment 时,我希望将操作按钮转换为后退按钮。我有点做到了这一点,但是当我从一个 fragment 按回并恢复另一个 fragment 时,后退按钮会变回主页按钮。

  2. 我想知道如何使主页按钮在转换为后退箭头时表现得像 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com