java - 处理 Fragment 中的 DrawerLayout

标签 java android drawerlayout

我正在尝试调试使用 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/

相关文章:

android - NavigationView 项目的涟漪效应

android - 提示有关 ListView 中的可视检查状态

android - 您需要将什么传递给 v4.widget.DrawerLayout.isDrawerOpen()/.openDrawer()/.closeDrawer()

java - 在 Java 中创建插件系统

java - 指令表现不符合预期

android - 如何为包含 ScrollView 的布局添加触摸事件

java - 如何在android中的 Activity 之间使用EventBus

java - System.in 输入,java 但带有 apache ant

java - 如何处理不可中断阻塞(ExecutorService)

android - 为什么 Navigation Drawer 项目模板 (Studio 3.6.1) 无法在 Android Nougat 上加载正确的 Controller ?