从活动类中打开 Android 导航抽屉

2023-12-03

我正在开发安卓系统Navigation Drawer通过他们的文档看起来,抽屉只能扩展 Fragment Activity,因此要从我的所有活动中打开抽屉,我需要将我的所有活动变成一个片段,这不是一个可行的解决方案。

有没有办法打开一个从 Activity 扩展 FragmentActivity 的抽屉?

当我尝试从 Activity 类扩展抽屉活动,以及另一个将打开扩展抽屉活动类(此处为 SlideMenuActivity)的抽屉的活动时,应用程序崩溃并给出 NullPointerException。

下面是打开抽屉布局的代码,但是一旦第一个活动启动,我就无法访问抽屉。

应用程序在 onPostCreate 方法中的syncState点上崩溃

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onPostCreate(savedInstanceState);
    getActionDrawerToggle().syncState();
}

public class SlideMenuActivity extends FragmentActivity implements OnItemClickListener


{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setDrawerLayout();
        setDrawerList();
        if (savedInstanceState == null) 
        {
            getDrawerListView().setSelectionAfterHeaderView();
            getDrawerListView().setSelection(1);
            selectItem(1);
        }
    }
//  
//  @Override
//  public void setContentView(int layoutResID) {
//      // TODO Auto-generated method stub
//      super.setContentView(layoutResID);
//  }

    private DrawerLayout getDrawerView()
    {
        return (DrawerLayout)findViewById(R.id.drawer_layout);
    }

    private ListView getDrawerListView()
    {
        return (ListView) findViewById(R.id.left_drawer);
    }

    private ActionBarDrawerToggle getActionDrawerToggle()
    {
        ActionBarDrawerToggle drawerToggle=new ActionBarDrawerToggle(
                this,                  /* host Activity */
                getDrawerView(),         /* DrawerLayout object */
                R.drawable.ic_drawer,  /* nav drawer image to replace 'Up' caret */
                R.string.drawer_open,  /* "open drawer" description for accessibility */
                R.string.drawer_close  /* "close drawer" description for accessibility */
                ) {
            @Override
            public void onDrawerClosed(View view) {
               super.onDrawerClosed(view);
            }

            @Override
            public void onDrawerOpened(View view) {
                super.onDrawerOpened(view);
            }
        };
        return drawerToggle;
    }

    private void setDrawerLayout(){
        // set a custom shadow that overlays the main content when the drawer opens
        getDrawerView().setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.RELATIVE_HORIZONTAL_GRAVITY_MASK);
        // enable ActionBar app icon to behave as action to toggle navigation drawer
        getDrawerView().setDrawerListener(getActionDrawerToggle());

    }

    /**
     *  Set up the drawer's list view with items and click listener
     */
    private void setDrawerList()
    {
        ImageView imageView=new ImageView(this);
        imageView.setImageDrawable(getResources().getDrawable(R.drawable.precision_logo));
        CustomBaseAdapter adapter=new CustomBaseAdapter();
        adapter.list=getListViewData();
        adapter.context=this;
        ListView drawerList=getDrawerListView();
        drawerList.setHeaderDividersEnabled(true);
        drawerList.addHeaderView(imageView, null, false);
        drawerList.setScrollingCacheEnabled(false);
        drawerList.setAdapter(adapter);
        drawerList.setOnItemClickListener(this);

    }

    private void selectItem(int position){

         // update the main content by replacing fragments

//        Fragment fragment=null;
//      FragmentManager manager=getSupportFragmentManager();
        switch (position) {
        case 1:
            this.startActivity(new Intent(this,SavedTankListActivity.class));
//          fragment = new SavedMixesFragment();
//          fragment = new SavedTankListActivity();
//          manager.beginTransaction().replace(R.id.content_frame, fragment).commit();
            break;

        case 2:
//          fragment=new MixGuideFragment();
//          manager.beginTransaction().replace(R.id.content_frame, fragment).commit();
            break;

        default:
//          fragment = new SavedMixesFragment();
//          manager.beginTransaction().replace(R.id.content_frame, fragment).commit();

            break;
        }

        getDrawerView().closeDrawer(getDrawerListView());

    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onPostCreate(savedInstanceState);
        getActionDrawerToggle().syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        // TODO Auto-generated method stub
        super.onConfigurationChanged(newConfig);
        getActionDrawerToggle().onConfigurationChanged(newConfig);
    }

    private ArrayList<DrawerListModel> getListViewData()
    {
        ArrayList<DrawerListModel> listViewData=new ArrayList<DrawerListModel>();
        String[] listItemArray=getResources().getStringArray(R.array.slide_bar_list_item_array);
        for(int index=0;index<listItemArray.length;index++)
        {
            DrawerListModel model=new DrawerListModel();
            model.listItem=listItemArray[index];
            listViewData.add(model);
        }
        return listViewData;
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,long id)
    {
        view.setSelected(true);
        selectItem(position); 
    }

    public void openDrawerList(View view){
        getDrawerView().openDrawer(getDrawerListView());
    }
}

我也在查看文档,并认为我必须将所有活动转换为片段。澄清一下,事实并非如此。您可以在线性布局或任何需要的情况下拥有任意数量的元素。

例如,如果您没有 appdrawer 的基本活动是:

<RelativeLayout>
   <TextView>
   </TextView>
   <Button>
   <Button>
</RelativeLayout>

简单地做

<android.support.v4.widget.DrawerLayout>

    <RelativeLayout>
       <TextView>
       </TextView>
       <Button>
       <Button>
    </RelativeLayout>

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

从活动类中打开 Android 导航抽屉 的相关文章

  • 获取 get 或 post 请求的响应的响应字符集

    我正在努力在 java web 应用程序中提取响应字符集 我在其中使用 Apache HTTP 客户端 例如 从 Content Type 标头获得的一个可能值是 text html charset UTF 8 然后我的代码将提取 符号之后
  • Android 相机:线程?哪个应该做什么

    我试图弄清楚哪些线程应该在 Android 中执行哪些操作 我发现官方文档中唯一说明的是camera open 应该放入它自己的线程中 关于什么 camera startPreview camera stopPreview camera r
  • 没有绑定 play.db.Database 的实现

    我在使用 hikaricp 时访问数据库时遇到问题 这是我的reference conf play modules enabled play api db DBModule enabled play api db HikariCPModul
  • JavaFX 控制器如何访问其他服务?

    我将 JavaFX 2 与 Scala 一起使用 我有class Application extends javafx application Application它执行诸如读取应用程序配置等操作 然后它会启动主窗口 该主窗口需要连接到一
  • 如何使用 DirectoryStream.Filter 过滤隐藏文件

    我正在尝试使用 NIO 类过滤隐藏文件 当我在 Windows 10 上运行随附的代码时 我得到以下输出 Files c Documents and Settings c PerfLogs c Program Files c Program
  • Jenkins 中未找到 Maven

    我正在 Jenkins 中运行我的 Maven Spring 项目 只是第一次测试它 使用 shell 脚本选项 mvn spring boot run 我收到构建错误 Users Shared Jenkins tmp jenkins808
  • 从 ArrayList HashMap 中获取多个随机值

    我想从 ArrayList 中获取一些特定数字的随机值 final ArrayList
  • W/Firestore:[CustomClassMapper]:Android 类没有设置器/字段

    我试图使用 Recyclerview 从 Documents 类加载数据 但 logcat 上出现错误 W Firestore 21 1 1 CustomClassMapper No setter field for Document Na
  • 如何同时运行两个FOR循环

    我正在使用加速度计 第一个代码是振动检测器 代码1 if sensor SensorManager SENSOR ACCELEROMETER long curTime System currentTimeMillis long now Sy
  • 如何从 Coldfusion 2016 中加载 jsoup Java 库?

    TLDR CreateObject 函数会抛出异常 java lang ClassNotFoundException 因为它看不到 java 类 JAR 文件 有什么想法我做错了什么吗 谢谢 Application cfc 的内容
  • Spring Hibernate 4 支持

    我正在使用 Hibernate 4 CR1 我的应用程序之前使用 Spring hibernate 支持 版本 3 我还没有找到任何相关信息 是否有任何迹象表明 Spring 何时 或哪个版本 将提供对 Hibernate 4 的支持 UP
  • 将私有 Java 9 模块包公开给 JUnit 的正确方法是什么?

    我有一个 可执行 Java 9 模块 意味着它不会公开任何包 它只包含一个main函数 我需要测试 我正在使用 Gradle 的java library and org gradle java experimental jigsaw插件 我
  • Android Widget 实现

    嗨 如果这个问题很愚蠢 我提前道歉 我对 Android 编程相当陌生 而且学得很快 我刚刚创建了一个任务提醒应用程序 并且想将该应用程序转换 实现为一个可以在主屏幕上查看的小部件 有什么方法吗 这可能吗 Thanks 如果没有更多关于您的
  • 从 java 反射中隐藏我的安全密钥

    下面的类是我用于加密的安全密钥提供程序 public class MySecretKey private String key 2sfdsdf7787fgrtdfg cj5 Some Util methods goes on Here 首先
  • 为什么 CompletableFuture.allOf 声明为 CompletableFuture

    Why is CompletableFuture allOf声明为CompletableFuture
  • java 未知深度的嵌套哈希图

    我有一个要求 我需要有一个嵌套的哈希图 但深度将在运行时决定 例如 如果在运行时 用户说 3 那么我的哈希图应该是这样的 HashMap
  • 如何在 Tomcat 6 中合理配置安全策略

    我使用的是为 Ubuntu Karmic 打包的 Tomcat 6 0 24 Ubuntu 的 Tomcat 软件包的默认安全策略相当严格 但看起来很简单 在 var lib tomcat6 conf policy d 有多种建立默认策略的
  • 使用迭代器时无限循环

    Set key1 map keySet Iterator it1 key1 iterator int cnt 0 while it1 hasNext cnt 这段代码导致无限循环的可能性有多大 实际上这会导致无限循环 我怀疑是因为我没有服用
  • Hibernate 对于 Android 应用程序来说是一种杀伤力吗? [复制]

    这个问题在这里已经有答案了 我正在为我的 Android 应用程序寻找一个好的 ORM 乍一看似乎对于移动设备我更喜欢使用更简单的东西 问题是我只是在这里假设 没有真正的证据 所以我想我应该询问社区的意见 也许有人有过这样的经历 它是一个相
  • 无法声明接口:资源繁忙

    我正在使用 USB4Java 低级版本 并且基本上是根据这段代码工作的here http www mets blog com java usb communication usb4java 我在 Ubuntu 中工作 遇到了有关权限的问题

随机推荐

  • 使用 PyQt 处理 SQL 数据库:基础知识

    目录 Connecting PyQt to an SQL Database 创建数据库连接 处理多个连接 使用不同的 SQL Divers 打开数据库连接 Running SQL Queries With PyQt 执行静态 SQL 查询
  • map() 函数:概述

    在本节中 您将了解更多有关函数式编程的基础知识 即如何使用map 函数进行变换数据结构 您将采用本课程之前视频中使用不可变数据结构表示的示例数据集 然后创建一个转变的使用Python内置的相同数据的版本map 功能 map 是 Python
  • 在 Nitrous.IO 上使用 Django 和 Flask

    目录 入门 使用 Virtualenv 设置 Python 2 7 安装Django 安装烧瓶 这是我们的朋友 Greg McKeever 的客座帖子亚硝酸盐 Nitrous IO 是一个允许您在云中快速启动自己的开发环境的平台 以下是在上
  • Python 基础知识:字符串和字符串方法(概述)

    许多程序员 无论其专业如何 都会在计算机上处 理文本 每日基础 例如 网络开发人员使用来自以下位置的文本输入 网络表格 数据科学家处理文本以提取数据并执行 诸如情感分析之类的任务 可以帮助识别和分类 文本正文中的意见 Python 中的文本
  • Python 中的函数式编程:何时以及如何使用它

    目录 什么是函数式编程 Python 对函数式编程的支持程度如何 使用 lambda 定义匿名函数 Applying a Function to an Iterable With map 使用单个可迭代对象调用 map 使用多个可迭代对象调
  • 教材:书面教程

    在本视频中 您将了解如何访问 Real Python 上的另一种类型的学习资源 基于文本的教程 您将了解在哪里可以找到我们编写的 Python 教程 如何访问额外资源 例如代码示例和可下载指南 等等 重要链接 教程概述页面 教程主题页面
  • Jupyter Notebook:简介

    目录 Getting Up and Running With Jupyter Notebook 安装 启动 Jupyter Notebook 服务器 Creating a Notebook 命名 运行细胞 菜单 启动终端和其他东西 查看正在
  • 如何将一个字符串哈希为8位数字?

    无论如何 我可以将随机字符串哈希为 8 位数字 而无需自己实现任何算法吗 是的 您可以使用内置的hashlib模块或内置hash功能 然后 对哈希的整数形式使用模运算或字符串切片运算截取最后八位数字 gt gt gt s she sells
  • $_SERVER["HTTP_REFERER"] 无法在 Mozilla 上运行

    我开发了一个简单的模态框并添加了 SERVER HTTP REFERER 所以从特定的引荐来源网址到不会出现 它工作正常 但是 SERVER HTTP REFERER 不适用于 Mozilla 还有其他方法可以做到这一点吗 我正在使用简单的
  • 读取输入后隐藏控制台窗口

    我有一个带有 GUI 的脚本 它获取用户数据并将其存储到文本文件中 它运行另一个脚本 exe 等待用户输入 然后执行一些工作 我想要的是后一个脚本在读取用户的输入后隐藏其控制台窗口 但继续在后台工作 我尝试运行该脚本subprocess c
  • 基于另一列值的一列的累积和 (R)

    我有一个包含 2 列的数据框 如下所示 gt data frame x 1 10 y c 0 0 0 1 1 0 0 1 0 1 x y 1 1 0 2 2 0 3 3 0 4 4 1 5 5 1 6 6 0 7 7 0 8 8 1 9 9
  • 存储信用卡详细信息

    我的业务要求迫使我在短时间内存储客户的完整信用卡详细信息 号码 姓名 到期日 CVV2 理由 如果客户打电话订购产品 而他们的信用卡当场被拒绝 您很可能会失去销售机会 如果您获取他们的详细信息 感谢他们的交易 然后发现该卡被拒绝 您可以给他
  • 如何搜索可用的 RFC 功能模块和表

    我必须承认我不是 SAP R 3 编程方面的专家 所以这更多的是关于这个问题的基本问题 有没有办法获取 SAP 系统上可访问的 RFC 模块和 或表的列表 在互联网上的许多示例中 我发现一个 RFC 模块似乎在每个 SAP 系统上都可用 S
  • 查找所有重叠区间的计数

    我有所有记录的开始时间和结束时间 如下所示 startTime 21345678 endTime 31345678 我正在尝试查找所有冲突的数量 例如 如果有两条记录并且它们重叠 则冲突数为 1 如果有 3 个记录 其中两条重叠 则冲突为
  • 禁用按钮/禁用选项菜单的 tkinter 颜色

    我正在为 Unity Ubuntu 开发一个快速列表编辑器 初始 界面包含禁用的选项菜单按钮 右下的 和编辑按钮 右上角 和禁用的 正常 按钮 然而 tkinter 并不同等对待这两种禁用图标 禁用的选项菜单图标比 正常 禁用按钮图标稍暗
  • 如何标记视频播放器以从其他应用程序打开视频文件?

    我写了一个视频播放器 想知道 当您从其他应用程序 例如文件浏览器 单击视频文件时 会出现可以打开该视频文件的应用程序列表 如何让我的玩家也出现在该列表中 Thanks 您必须注册Intent你想要在你的活动中 从 API 15 开始 您需要
  • Xcode PhoneGap navigator.connection 未定义

    尝试将我的 PhoneGap javascript 代码移植到 Xcode 中以便在 iOS 中进行调试 使用 Cordova 3 0 0 当我打电话时 navigator connection type 我收到 navigator con
  • 在哪里可以获得 BERT 的预训练词嵌入?

    我知道 BERT 的总词汇量为 30522 其中包含一些单词和子词 我想获得 BERT 的初始输入嵌入 所以 我的要求是获得尺寸表 30522 768 我可以通过 token id 进行索引来获取其嵌入 我在哪里可以得到这张桌子 BertM
  • gl_PointSize、gl_Position、gl_FragCoord之间的关系

    例子 VS 着色器 void main gl Position vec4 0 0 0 1 gl PointSize 100 0 画布为 1x5 像素 宽度 高度 片段着色器使用 gl FragCoord 这 5 个像素的 gl FragCo
  • 从活动类中打开 Android 导航抽屉

    我正在开发安卓系统Navigation Drawer通过他们的文档看起来 抽屉只能扩展 Fragment Activity 因此要从我的所有活动中打开抽屉 我需要将我的所有活动变成一个片段 这不是一个可行的解决方案 有没有办法打开一个从 A