如何从 Android Fragment 禁用或隐藏抽屉布局

2024-03-17

我的应用程序中有 10 个不同的片段。我需要在几个片段中隐藏导航抽屉(抽屉布局),如何从片段访问抽屉布局并隐藏它?我知道我们需要在活动中使用mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);但如何在片段中做到这一点呢?


你可以在你的片段中做这样的事情:

private MainActivity main;

@Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        main = (MainActivity) activity;
    }

你绝对应该避免这种情况!

更好的解决方案将使用接口在主组件和片段之间进行通信。你最终会得到这样的结果:

public interface MyInterface {
 public void lockDrawer();
 public void unlockDrawer();
}

Main:

public class DetailViewActivity extends AppCompatActivity implements MyInterface {
 @Override
    public void lockDrawer() {         
      mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
    }

 @Override
    public void unlockDrawer() {
     mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
    }

}

分段:

   public class MyFragment extends Fragment {
     private MyInterface myInterface;

     @Override
     public void onAttach(Activity activity) {
      super.onAttach(activity);
       try {
        myInterface = (MyInterface) activity;
           } catch (ClassCastException e) {
              throw new ClassCastException(activity.toString() + " must implement MyInterface");
            }
        }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        myInterface.lockDrawer();
        return inflater.inflate(R.layout.example_fragment, container, false);
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        myInterface.unlockDrawer();
    }

}

为什么这是最好的解决方案:如果您执行类似 ((HomeActivity) mActivity) 的操作,您将无法重用您的 Fragment。 将会出现 ClassCastException。为了重用您的 Fragment,您应该使用 Interface,而不是转换 MainActivity。所以每个活动都会使用 你的片段可以简单地实现这个接口。即使没有 DrawerLayout 你也可以使用它。所以最大的努力就是可重用性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Android Fragment 禁用或隐藏抽屉布局 的相关文章

  • (colorPrimaryDark) 状态栏颜色在 android v21 上不起作用?

    我在 style xml 上添加了 colorPrimaryDark 但状态栏 android v21 上的颜色没有受到影响 我有一个自定义工具栏 我在 style xml 代码中不使用操作栏主题 如果有任何解决方案请帮助我吗 样式代码
  • Android GooglePlayServicesUtil.getErrorDialog() 不显示对话框

    我正在尝试检查是否可用Google Play 服务 APK在使用它之前 我有一个 软件包已过期的设备 日志显示 Google Play 服务已过时 需要 3225100 但找到 3136134 下面的代码将处理这种情况并显示一个对话框 提示
  • 在 Android 库项目中禁用 Crashlytics 进行调试

    我有一个包含多个模块的项目 模块的公共代码位于库模块中 问题是我们最近将 Crashlytics 添加到了我们的项目中 在库模块中 即使我们处于调试模式 我们也会不断收到错误报告 我在网上搜索了一下 发现库总是被视为Release模式 现在
  • 可序列化对象的 ArrayList 的加密保存和解密加载

    我在 SD 卡中保存并加载一个文件 其中包含ArrayList使用这两种方法的可序列化对象 保存方法 public static void saveUserList ArrayList
  • Android NDK:断言失败:TARGET_PLATFORM 未定义

    使用 NDK r5b 时 当我使用以下命令在 jni 目录中进行构建时 NDK DIR ndk build 效果很好 但是当我切换到 r6b 只需以不同的方式设置 NDK DIR 并运行相同的命令时 我得到 usr local androi
  • 如何创建轮播ViewPager?

    我想做的只是 Android 中的水平轮播 如果我有 3 个屏幕 A B 和 C 那么我希望我的 ViewPager 允许我像这样移动 A B B C C A GTalk for Android 的对话可以这样切换 三星的主屏幕和应用程序屏
  • 在 flutter 应用程序中添加启动屏幕的正确方法是什么?

    我正在开发一个基于 flutter 的应用程序 并研究了几种添加闪屏的方法 但我不确定哪一个是最好实现的 import dart async import package flutter material dart import packa
  • 即使具有用户权限,也无法在外部存储上保存文件 [Android]

    我正在 Android 上开发一个用于图像处理的应用程序 但我一直在编写图像保存代码 这是我使用的方法 private void saveImageToExternalStorage Bitmap finalBitmap String ro
  • Android studio 3.0不生成签名的apk

    将 android studio 更新到版本 3 0 Windows 后 我无法生成签名的 APK 构建完成后 我收到消息 单击 查找 会将我带到 APP 文件夹 但找不到 APK 改变了什么 自Android Studio 3 0更新后
  • 如何在Android中以编程方式替换视图? [复制]

    这个问题在这里已经有答案了 我有一个复杂的视图 包含多个子视图 例如文本视图和图像视图 我想用另一个 派生的 图像视图替换其中一个图像视图 另一个支持在后台加载图像 如何用新的图像视图替换原始图像视图 我目前的解决方案只是复制粘贴整个 XM
  • 如何在 Android 中签署 AAR Artifacts?

    我目前正在开发一个 AAR android 库 我想用我自己的密钥对已发布的工件进行签名 以便我可以确定我是否发布了具有相同名称和功能的假 aar 注意事项1 我希望能够以编程方式检查我的库的真实性 即使是一个伪造的库 只是伪造了我的 aa
  • GoogleMap 本质上是可打包的吗?

    我对java和android很陌生 我遇到了一个基本问题 在这个给定的fragment 我可以添加GoogleMap对象为parcelable没有任何额外的pracelable类为 public class SecondFragment e
  • 覆盖乔达一周的第一天?

    是否有可能覆盖乔达弱的第一天sunday 因为 Joda 使用Monday作为一周的第一天 如果有办法的话 谁能解释一下 我在 SOF 中提到了以下主题 乔达时间 一周的第一天 https stackoverflow com questio
  • 将 glReadPixels 替换为 EGL_KHR_image_base 以加快像素复制速度

    我试图在 Android 本机进程中使用 EGL KHR image base 来替换 glReadPixels 因为它很慢 1280x800 RGBA 为 220ms 这是我到目前为止所拥有的 但我的它产生一个空缓冲区 只有零 uint8
  • Android 上的 Facebook 社交插件

    我想集成 Facebook 的评论社交插件 https developers facebook com docs reference plugins comments https developers facebook com docs r
  • 如何在列表视图中选择时启用视频序列自动播放?

    大家好 有人可以与我分享一下我如何编写我的 viewvideo java 类 以便它允许自动播放视频功能 自动排序在列表视图中播放所选视频的任务 从当前位置到最新录制的视频 按顺序直到最新的视频播放完毕 这类似于 YouTube 自动播放功
  • 如何在没有片段的情况下使用导航抽屉?

    我正在尝试遵循这个tutorial https developer android com training implementing navigation nav drawer html关于如何创建导航抽屉 但我不想在用户从抽屉列表中选择
  • 从另一个活动返回时 Android ListView 项目没有响应?

    我从 ArrayAdapter 创建一个 ListView ListView的每一行都有一个ImageView和一个TextView 现在我使用 setOnItemClickListener 处理单击事件 lv getListView lv
  • 将 Spritekit 游戏转换为 Android?

    是否有任何新选项可以将 spritekit 游戏转换为 Android 游戏 似乎唯一的选择是用 Java 重新编码所有内容或使用 Cocos2D LibGDX 等 很不幸的是 不行 而且带有 Apportable 服务的跨平台 Sprit
  • Android NDK - 仅用 C/C++ 编写

    有没有一种可能的方法可以使用 C C 编写整个 NDK 应用程序 而无需像 hello jni 示例项目 HelloJni java 中那样的 Java 入门 类 以某种方式创建一个 HelloJni c 来执行相同的操作 从 Androi

随机推荐

  • C++14 与 C++17 的部分专业化差异?

    代码 include
  • 如何使用Electron的app.getPath()来存储数据?

    我想将图像存储在用户计算机上 所以我认为它应该存储在用户数据文件夹中 如上所述here https github com electron electron blob master docs api app md appgetpathnam
  • Ajax更新面板和Jquery:ajax()方法的使用区别

    我对更新面板的使用和 Jquery Ajax 方法的使用有点困惑 它们都用于部分回发吗 哪种休耕方式最好 请帮我解决这个问题 更新面板执行页面的完全重新渲染 获取与面板匹配的部分并将其发送回客户端 然后浏览器用新的 html 替换更新面板的
  • 单页应用程序和 CSRF 令牌

    我需要使用带有 Rails CSRF 保护机制的单页应用程序 React Ember Angular 我不在乎 我想知道是否需要每次都创建一个令牌ApplicationController像这样 class ApplicationContr
  • 如何通过 Asyncio 使用 Python 内置日志记录(权限错误)

    我每天晚上都使用 TimedRotatingFileHandler 从日志记录到新文件 根据记录文档 https docs python org 2 library logging handlers html timedrotatingfi
  • 如何使用命令行(Windows)突出显示 PDF 中的文本?

    我正在寻找一种突出显示单词的方法 例如 一些话 0 9 或者更好的是在一些片面的 PDF 中包含给定单词的整行 它将成为 Windows 上批处理的一部分 因此我需要一种命令行方式来执行此操作 我看过 Ghostscript 但不知道如何使
  • 将点击事件绑定到 jQuery Datatable on() 中的 tr 元素不起作用

    我正在开发一个包含所有用户的表 也可以通过单击表行并在单击执行后打开的表单中编辑数据来更改该表 如果我在页面加载时加载了所有用户 我的代码就可以正常工作 一旦我更改数据表以在数据表初始化时加载用户 它将仅在第一页上工作 如果我取消注释我的下
  • 当子类化 Ruby 哈希时,如何重写 []= 方法?

    我有一个扩展哈希的类 我想跟踪哈希键何时被修改 覆盖的正确语法是什么 key 语法方法来完成这个 我想插入我的代码 然后调用父方法 这可以用 C 方法实现吗 我从文档中看到底层方法是 rb hash aset VALUE hash VALU
  • Plone 工作流程的圣杯

    我们正在实施 Plone CMS 作为 ISO9001 文档的存储库 ISO 要求一定量的日志记录 任何熟悉该标准的人都可能知道 为了灵活性 我们希望合并 不按特定顺序 新的内容类型 需要合并企业中可能出现的不同文档 版本控制 表明我们的文
  • Maven 程序集插件在 jenkins 中重新下载依赖项

    由于某种原因 每次我尝试使用 Jenkins 构建项目时 maven 似乎都在尝试下载项目的依赖项 有一些问题 第一个是它根本不应该这样做 另一个问题是它甚至没有尝试从正确的存储库下载它们 这意味着它必须等待它们中的每一个都超时 我可以自己
  • 如何使geom_bar中的闪避与geom_errorbar、geom_point中的闪避一致

    我有一个数据集 其中在不同日期对不同组进行测量 我想要并排的条形图代表不同组在不同日期的测量值 条形图组根据测量日期间隔 并在它们上面覆盖误差条 我在躲避时遇到了麻烦geom bar同意闪避geom errorbar 这是一段简单的代码 d
  • 基于int数组创建WritableRaster

    我需要获取一个 int 数组并将其转换为 BufferImage 我真的对这个主题没有任何背景 我都是从互联网上学到的 所以这就是我想要做的 从 BufferedImage done 创建一个数组 将该数组转换为 IntBuffer don
  • TabIndex 无法正常工作的可能原因是什么

    所以我从 0 开始 为表单上的控件定义 tabindex 但在运行时一切都搞砸了 形式有点复杂 它有水平和垂直的分割器和面板 组框和一些旧的 VB 6 0 activeX 控件 它们内部是一个树控件 即使我以编程方式执行此操作并读取prev
  • 接口中的协变返回类型未通过 Javac 编译

    我有以下结构 public interface BarReturn public interface FooReturn public interface FooBarReturn extends FooReturn BarReturn p
  • 无法在 firebase 云函数中创建自定义令牌,因为服务帐户没有必要的权限

    打电话时admin auth createCustomToken 我收到以下错误 需要 iam serviceAccounts signBlob 权限才能对服务帐户项目 serviceAccounts k 执行此操作 电子邮件受保护 cdn
  • 使用 #!/usr/bin/php 时自定义 php.ini

    我有一个脚本 我试图在其中加载自定义php ini文件 该脚本通过以下方式在 nix 系统上运行 usr bin php qc path to php ini标头 然而 当这样做时 PHP 报告加载的php ini文件不存在 即没有加载 如
  • 在 ondrag 事件期间,pageX 和 pageY 在 Firefox 中始终设置为 0

    我正在实现一个可视化编辑器 允许用户将图像拖动到页面上 并将其他图像拖动到这些先前拖动的图像中 类似于 添加另一个图像 我基本上只需要拖动过程中的鼠标坐标 元素 hiliting 等 我使用基于这些坐标的自定义函数 问题是 在 Webkit
  • 升级 @ngrx/Store 时,“Action”类型上不存在属性“payload”

    我有 ngrx store打包在我的 Angular 4 x 应用程序中 并从 v 升级2 2 2 gt v4 0 0 我可以看到迁移注释说 Payload 属性已从 Action 接口中删除 然而 他们给出的例子似乎完全违反直觉 在我看来
  • 整个网页使用一个文件的优点和缺点? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我不知道该怎么表达 但我会尝试一下 我最近开始用面向对象的 PHP 编写我的作品集 我想知道使用内容根据 SQL 数据和 GET 变量
  • 如何从 Android Fragment 禁用或隐藏抽屉布局

    我的应用程序中有 10 个不同的片段 我需要在几个片段中隐藏导航抽屉 抽屉布局 如何从片段访问抽屉布局并隐藏它 我知道我们需要在活动中使用mDrawerLayout setDrawerLockMode DrawerLayout LOCK M