【问题标题】:Hide NavigationDrawer and ActionBar From Fragment从片段中隐藏 NavigationDrawer 和 ActionBar
【发布时间】:2019-10-10 14:38:56
【问题描述】:

我试图从片段中隐藏 NavigationDrawer 和 ActionBar。

我已经创建了以下接口并在活动中实现了相同的接口

  public interface CommonMethodsListener {
      void hideActionbar();
      void showActionbar();
      void setActionBarTitle(String title);
  }

我在Activity中实现了以下方法。

  public void setDrawerEnabled(boolean enabled) {
      int lockMode = enabled ? DrawerLayout.LOCK_MODE_UNLOCKED :
              DrawerLayout.LOCK_MODE_LOCKED_CLOSED;
      drawer.setDrawerLockMode(lockMode);
      toggle.setDrawerIndicatorEnabled(enabled);
  }

  @Override
  public void hideActionbar() {
      getSupportActionBar().hide();
      setDrawerEnabled(false);
  }

  @Override
  public void showActionbar() {
      getSupportActionBar().show();
      setDrawerEnabled(true);
  }

我在 Fragment 中调用hideActionBar()showActionBar(),如下所示

  @Override
  public void onResume() {
      super.onResume();
      mCommonMethodsListener.hideActionbar();
  }

  @Override
  public void onPause() {
      super.onPause();
      mCommonMethodsListener.showActionbar();
  }

我无法使用上述代码隐藏 ActionBar 和 NavigationDrawer。

我有两个片段,分别称为 SplashFragmentLoginFragment。我在两个片段中都调用了hideActionBar() 和'showActionBar()inonResume()andonPause()`。

SplashFragment 加载时没有 ActionBarNavigationDrawer。带有postDelayedHandler 将在预设延迟3000 毫秒后导航到LoginFragment

LoginFragment 出现 ActionBarNavigationDrawer

build.gradle 如下。

  android {
      compileSdkVersion 28
      defaultConfig {
          applicationId "io.azpire.ncloudpay"
          minSdkVersion 24
          targetSdkVersion 28
          versionCode 1
          versionName "1.0"
          testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
      }
      buildTypes {
          release {
              minifyEnabled false
              proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
          }
      }
      dataBinding {
          enabled = true
      }
  }

  dependencies {
      implementation fileTree(dir: 'libs', include: ['*.jar'])
      implementation 'androidx.appcompat:appcompat:1.0.2'
      implementation 'androidx.legacy:legacy-support-v4:1.0.0'
      implementation 'com.google.android.material:material:1.0.0'
      implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
      implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
      testImplementation 'junit:junit:4.12'
      androidTestImplementation 'androidx.test:runner:1.1.1'
      androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
      implementation 'androidx.navigation:navigation-fragment:2.0.0'
      implementation 'androidx.navigation:navigation-ui:2.0.0'

      implementation "androidx.room:room-runtime:2.1.0-beta01"
      annotationProcessor "androidx.room:room-compiler:2.1.0-beta01"
  }

【问题讨论】:

标签: android android-fragments android-actionbar navigation-drawer


【解决方案1】:

您应该将片段中的调用方法更改为

onResume() -> onCreate()

onPause() -> onDestroy()

当片段附加到活动时,这两个方法都被调用一次

【讨论】:

  • 我不确定onCreate()onDestroy() 是隐藏和显示的正确位置。但是,在onCreate()onDestroy() 中隐藏和显示不起作用。
  • 你是在片段中做这个吗?
  • 假设,你想为片段显示动作栏或隐藏导航抽屉,那么只需在片段中的 onCreate 或 onDestroy 中定义操作就会对你有所帮助。当第二个片段打开时,您可以为操作栏和导航抽屉定义显示或隐藏的默认设置
【解决方案2】:

改变

mCommonMethodsListener.hideActionbar();
mCommonMethodsListener.setDrawerEnabled(False);

((Activity)getActivity()).hideActionbar();
((Activity)getActivity()).setDrawerEnabled(False);

并将它们放入 OnCreate()

【讨论】:

  • 我试过了,但没有任何变化。我分享的代码确实适用于加载 SplashFragment,但不适用于下一个片段。我正在使用 Architecture Components 中的 Navigation 组件将 SplashFragment 替换为 LoginFragment
猜你喜欢
  • 2016-04-06
  • 2019-03-05
  • 2023-03-17
  • 2016-06-25
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
相关资源
最近更新 更多