如何从 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 禁用或隐藏抽屉布局 的相关文章

  • 在包“android”中找不到属性“backgroundTint”的资源标识符

    我发现了一些视图 xml 属性 例如backgroundTint backgroundTintMode 但是当我使用它作为视图属性定义时 Eclipse 显示错误 No resource identifier found for attri
  • React Native 从 JavaScript 代码内部访问 strings.xml

    有没有办法访问当前值android app src main res values strings xml从 JavaScript 代码内部 我想为每个构建放置不同的端点 URL 但我什至无法检测到反应本机代码内的构建类型 而不必求助于 D
  • Sqlite数据库生命周期?关闭应用程序后它会被删除吗?

    我正在遵循一个简单的教程 该教程创建一个从 SQLiteOpenHelper 扩展的类 并创建一个包含一个表和 5 行的数据库 好的 但我需要更多地了解 android Sqlite 数据库 例如 如果应用程序关闭或手机关机会发生什么 数据
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • Android 30+ 中的视频捕获意图 - 只有所有者才能与待处理项目交互

    我正在尝试在我的应用程序上捕获视频 它可以在 android API 30 以下运行 但不能在 30 以上运行 似乎在 sdk 30 之后 android 不允许完全读取外部存储 作用域存储 我目前遇到这个错误 java lang Ille
  • CardView 圆角获得意想不到的白色

    When using rounded corner in CardView shows a white border in rounded area which is mostly visible in dark environment F
  • Adobe 是否为其 PDF 阅读器提供 Android SDK 或 API? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望能够在我们的应用程序内的视图中显示本地 PDF 文件 在 Android 4 03 下的平板电脑上运行 目前 我们将 Adob eR
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Android 模拟器插件无法初始化后端 EGL 显示

    我在 Cloudbees 上设置了 Jenkins 作业 并且可以在那里成功签出并编译我的 Android 项目 现在我想在 android 模拟器中运行一些 JUnit 测试并添加 Android 模拟器插件 我将 显示模拟器窗口 选项设
  • 无法访问 com.google.android.gms.internal.zzbfm 的 zzbfm 类文件未找到

    我正在将我的 Android 应用程序项目从GCM to FCM 为此 我使用 Android Studio 中的 Firebase 助手工具 并遵循 Google 开发人员指南中的说明 一切都很顺利 并将我的应用程序代码更改为FCM根据助
  • 是否有 ADB 命令来检查媒体是否正在播放

    我想使用 ADB 命令检查根植于终端的外部设备中是否正在播放音频 视频 我无法找到任何 ADB 命令 如果有 我尝试过 adb shell dumpsys media player 我想要一个命令来指定视频是否正在运行 您可以使用以下命令查
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 发布android后更改应用内购买项目的价格

    在 Google Play 上发布后 是否可以更改应用内购买商品的价格 我假设该应用程序也已发布 完整的在线文档位于http developer android com http developer android com也http sup
  • 在gradle插件中获取应用程序变体的包名称

    我正在构建一个 gradle 插件 为每个应用程序变体添加一个新任务 此新任务需要应用程序变体的包名称 这是我当前的代码 它停止使用最新版本的 android gradle 插件 private String getPackageName
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 你的CPU不支持NX

    我刚刚下载了 android studio 但是我遇到了一个问题 当我运行它时 它说你的 cpu 不支持 NX 我应该怎么办 NX 或实际上是 NX 处理器位 是处理器的一项功能 有助于保护您的 PC 免受恶意软件的攻击 当此功能未启用并且
  • 在 android DatePickerDialog 中将语言设置为法语

    有什么办法可以让日期显示在DatePickerDialog用法语 我已经搜索过这个但没有找到结果 这是我的代码 Calendar c Calendar getInstance picker new DatePickerDialog Paym
  • Android Studio 0.4.3 Eclipse项目没有gradle

    在此版本之前 在 Android Studio 中按原样打开 Eclipse 项目似乎很容易 无需任何转换 我更喜欢 Android Studio 环境 但我正在开发一个使用 eclipse 作为主要 IDE 的项目 我不想只为这个项目下载
  • Android Studio - Windows 7 上的 Android SDK 问题

    我对 Google i o 2013 上发布的最新开发工具 Android Studio 有疑问 我已经成功安装了该程序并且能够正常启动 我可以导入现有项目并对其进行编辑 但是 当我尝试单击 SDK 管理器图标或 AVD 管理器图标时 或者
  • 如何根据 gradle 风格设置变量

    我想传递一个变量test我为每种风格设置了不同的值作为 NDK 的定义 但出于某种原因 他总是忽略了最后味道的价值 这是 build gradle apply plugin com android library def test andr

随机推荐

  • 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