如何锁定导航抽屉?

2024-01-18

在我的应用程序中,我使用导航抽屉,它工作正常,但我想做的是,当互联网不可用时,用户不应该无法打开导航抽屉,任何人都可以帮助我如何解决这个问题,导航代码抽屉如下..

public class MainActivity extends Activity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;


    AlertDialogManager alert = new AlertDialogManager();


    SessionManager session;

private CharSequence mDrawerTitle;


private CharSequence mTitle;


private String[] navMenuTitles;
private TypedArray navMenuIcons;

private ArrayList<NavDrawerItem> navDrawerItems;
private NavDrawerListAdapter adapter;
private String id;
private boolean b;



@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    session = new SessionManager(getApplicationContext());

    id = getIntent().getStringExtra("id");

    System.out.println("MAIN ID : " + id);

    mTitle = mDrawerTitle = getTitle();


    navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);


    navMenuIcons = getResources()
            .obtainTypedArray(R.array.nav_drawer_icons);

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.list_slidermenu);


    b = checkInternetConnection();


    if(b!=true)
    {
        //Toast.makeText(getApplicationContext(), "No Internet Available", Toast.LENGTH_SHORT).show();

        mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mDrawerList);
    }
    else
    {
        System.out.println("Available");

    }
    navDrawerItems = new ArrayList<NavDrawerItem>();


    navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));

    navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));

    navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));

    navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1)));
    // search
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));
    // help
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1)));
    //logout

    navDrawerItems.add(new NavDrawerItem(navMenuTitles[6], navMenuIcons.getResourceId(6, -1)));
    // Recycle the typed array
    navMenuIcons.recycle();

    mDrawerList.setOnItemClickListener(new SlideMenuClickListener());

    // setting the nav drawer list adapter
    adapter = new NavDrawerListAdapter(getApplicationContext(),
            navDrawerItems);
    mDrawerList.setAdapter(adapter);


        getActionBar().setDisplayHomeAsUpEnabled(true);
            getActionBar().setHomeButtonEnabled(true);
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.ic_drawer, //nav menu toggle icon
            R.string.app_name, // nav drawer open - description for accessibility
            R.string.app_name // nav drawer close - description for accessibility
    ) {
        public void onDrawerClosed(View view) {
            getActionBar().setTitle(mTitle);
            // calling onPrepareOptionsMenu() to show action bar icons
            invalidateOptionsMenu();
        }

        public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle(mDrawerTitle);
            // calling onPrepareOptionsMenu() to hide action bar icons
            invalidateOptionsMenu();
        }
    };
    mDrawerLayout.setDrawerListener(mDrawerToggle);

    if (savedInstanceState == null) {
        // on first time display view for first nav item
        displayView(0);
    }
}



public boolean checkInternetConnection() {
    final ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE);
    if (conMgr.getActiveNetworkInfo() != null && conMgr.getActiveNetworkInfo().isAvailable() &&    conMgr.getActiveNetworkInfo().isConnected()) {
          return true;
    } else {
          System.out.println("Internet Connection Not Present");
        return false;
    }
 }



/*void Showtoast(String message) {
Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();}
private Boolean exit = false;*/
@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    /*if (exit) 
    {
        finish(); // finish activity
    } else 
    {
        Toast.makeText(this, "Press Back again to Exit.",
                Toast.LENGTH_SHORT).show();
        exit = true;
        new Handler().postDelayed(new Runnable() 
        {
            @Override
            public void run()
            {
                exit = false;
            }
        }, 3 * 1000);

    }*/

     AlertDialog.Builder ald = new AlertDialog.Builder(MainActivity.this);
        ald.setTitle("Exit");
        ald.setMessage("Are you sure you want to quit.?");
        ald.setPositiveButton("Ok", new DialogInterface.OnClickListener()
        {
            @Override
            public void onClick(DialogInterface dialog, int which) 
            {
                moveTaskToBack(true);
                android.os.Process.killProcess(android.os.Process.myPid());
                System.exit(1);
            }
        });

        ald.setNegativeButton("Cancel", null);
        ald.show();
}





/**
 * Slide menu item click listener
 * */
private class SlideMenuClickListener implements
        ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        // display view for selected nav drawer item
        displayView(position);
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // toggle nav drawer on selecting action bar app icon/title
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    // Handle action bar actions click
    switch (item.getItemId()) {
    case R.id.action_settings:
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}


@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // if nav drawer is opened, hide the action items
    boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
    menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
    return super.onPrepareOptionsMenu(menu);
}

/**
 * Diplaying fragment view for selected nav drawer list item
 * */
private void displayView(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;
    switch (position) {
    case 0:
        fragment = new HomeFragment();

        break;
    case 1:
        fragment = new FindPeopleFragment();

        break;
    case 2:
        fragment = new PhotosFragment();

        break;
    case 3:
        fragment = new CommunityFragment();

        break;
    case 4:
        fragment = new PagesFragment();

        break;
    case 5:
        fragment = new WhatsHotFragment();

        break;

    case 6:
        fragment=new Mylist();

        break;

    default:
        break;
    }

    if (fragment != null) {
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment).commit();

        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(navMenuTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }
}

@Override
public void setTitle(CharSequence title) {
    mTitle = title;
    getActionBar().setTitle(mTitle);
}

/**
 * When using the ActionBarDrawerToggle, you must call it during
 * onPostCreate() and onConfigurationChanged()...
 */

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // Pass any configuration change to the drawer toggls
    mDrawerToggle.onConfigurationChanged(newConfig);
}

重新构造如下方法。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// toggle nav drawer on selecting action bar app icon/title
if (mDrawerToggle.onOptionsItemSelected(item)) {
    b = checkInternetConnection();
    if(b==true)
        return true;
}
// Handle action bar actions click
switch (item.getItemId()) {
    case R.id.action_settings:
         return true;
    default:
        return super.onOptionsItemSelected(item);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何锁定导航抽屉? 的相关文章

  • 如何对这个字符串进行子串化

    我想得到这个字符串的 4 个部分 String string 10 trillion 896 billion 45 million 56873 我需要的4个部分是 10万亿 8960亿 4500万 和 56873 我所做的是删除所有空格 然
  • 如何快速自动发送FCM或APNS消息?

    我正在开发一项后端服务 通过 FCM 或 APNS 向移动应用程序发送推送通知 我想创建一个可以在一分钟内运行的自动化测试 并验证服务器是否可以成功发送通知 请注意 我不一定需要检查通知是否已送达 只需检查 FCM 或 APNS 是否已成功
  • 在包“android”中找不到属性“backgroundTint”的资源标识符

    我发现了一些视图 xml 属性 例如backgroundTint backgroundTintMode 但是当我使用它作为视图属性定义时 Eclipse 显示错误 No resource identifier found for attri
  • 在 Android Studio 中,为什么我必须在模拟器中单击“运行应用程序”两次才能启动应用程序?

    在 Android Studio 中 当我按播放按钮在 Android 模拟器上安装并运行应用程序时 大约 5 10 秒后 我在屏幕底部收到一条消息 显示 安装成功 但应用程序实际上并未运行在模拟器上 我必须再次按下播放按钮 这是非常令人沮
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 如何使用 Cordova 获取当前安装的应用程序的版本?

    我已经找到了应用程序可用性插件 https github com ohh2ahh AppAvailability它主要检查用户是否在其设备上安装了某个应用程序 是否有可能获得应用程序的当前版本 开发者名称 重要 以及所有可能的信息 一般来说
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 是否有 ADB 命令来检查媒体是否正在播放

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

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • JavaMail 只获取新邮件

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

    我创建了一个库项目 并在多个应用程序之间共享 我实现了一个简单的会话过期功能 该功能将在一段时间后将用户踢回到登录屏幕 登录屏幕活动是我的主要活动 因此在清单中它看起来像这样
  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • 在 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:膨胀布局时出现 StackOverFlowError 和 InvokingTargetException

    首先 对不起我的英语 我在膨胀布局时有一个问题 我有一个自定义视图 从 LinearLayout 扩展而来 称为按钮帮助 我在名为的布局上使用该视图加载活动 我的以下代码在所有设备和模拟器上都能完美运行 但具有 QVGA 屏幕 例如 Sam
  • 一次显示两条Toast消息?

    我希望在一个位置显示一条 Toast 消息 并在另一位置同时显示另一条 Toast 消息 多个 Toast 消息似乎总是按顺序排队和显示 是否可以同时显示两条消息 是否有一种解决方法至少可以提供这种外观并且不涉及扰乱活动布局 Edit 看来
  • 实现滚动选择 ListView 中的项目

    我想使用 ListView 您可以在其中滚动列表来选择一个项目 它应该像一个 Seekbar 但拇指应该是固定的 并且您必须使用该栏来调整它 我面临的一个问题是 我不知道这种小部件是如何调用的 这使得我很难搜索 所以我制作了下面这张图片 以
  • 如何将 google+ 登录集成到我的 Android 应用程序中?

    大家好 实际上我需要通过我的应用程序从 google 登录人们 现在我阅读了 google 上的文档 其中指出 要允许用户登录 请将 Google Sign In 集成到您的应用中 初始化 GoogleApiClient 对象时 请求 PL
  • Crashlytics 出现 Android Studio 构建错误

    我正在尝试将 CrashLytics 与 Android Studio 和 gradle 一起使用 但出现一个令人困惑的错误 java lang NoSuchMethodError 我的 build gradle 是 buildscript

随机推荐

  • JMS Serializer 忽略 Knp Paginator 的映射

    我在使用 JMS 序列化程序排除某些 KNP Paginator 属性时遇到问题 首先 它包含在composer json中 jms serializer bundle 0 13 knplabs knp paginator bundle 2
  • 从应用程序外部记录按键(VB.net)[重复]

    这个问题在这里已经有答案了 我正在制作一个程序 它使用键盘记录器的功能来确定趋势 问题是我无法制作键盘记录器 我已经完成了大部分内容 但当表单失去焦点时我无法按下按键 我见过有人提到键盘和消息挂钩 但我找不到任何示例或理解任何有关它的文档
  • 如何让 JVM 使用服务器的最大(全部剩余)内存

    我有一个 DFS 算法 java 控制台应用程序 当提供更多内存时 它运行得更快 只是一个 DFS 算法应用程序 既没有 I O 也没有其他外部 JVM 资源使用 它只消耗CPU和内存 该应用程序可以在 1GB 内存下运行 但在 2GB 内
  • ASP.NET Razor 页面下拉列表

    div class form group Html LabelFor model gt model CountyId htmlAttributes new class control label col md 2 div class col
  • numpy 二项式随机数效率低吗?

    我一直在从不同的分布中采样随机数 并且刚刚意识到 numpy 二项式随机数与其他分布相比有多慢 例如 timeit for x in range 100 np random binomial 100 0 5 10000 loops best
  • 单击后退按钮时执行代码 (REACTJS)

    例如 当我浏览一个页面到另一页面时 将执行以下代码 当我单击类别页面列表中的产品时 下面的代码设置一个会话存储键 该密钥将具有类别页面的位置 已滚动多少页面 因此 当产品页面打开时 它会将其密钥保存在会话中 如果再次访问同一类别页面 则会恢
  • 级别的特定记录器

    我正在使用 log4j 进行日志记录 我有一个场景 我必须对不同的严重性使用单独的日志记录 例如 对于包 foo 我必须在控制台中打印严重性为 ERROR 的消息 而我必须在日志文件中打印严重性为 WARN 的消息 我如何配置我的 log4
  • 如何在 PHP 中创建 websockets 服务器

    我正在寻找一个简单的代码来创建 WebSocket 服务器 我找到了 phpwebsockets 但它现在已经过时并且不支持最新的协议 我尝试自己更新 但似乎不起作用 php q
  • 如何在 NodeJS 中使用套接字(socket.io)找到客户端的响应时间(延迟)?

    我正在尝试使用 NodeJS 创建一个多人游戏 并且我想同步客户端之间的操作 查找客户端和服务器之间的延迟 请求返回客户端所需的时间 的最佳方法是什么 我的第一个想法是客户端 1 可以发送带有 is 请求的时间戳 因此当客户端 2 收到客户
  • 如何在 JSON 对象中获取 JSON 数组?

    这是我的 JSON data id 1 Name Choc Cake Image 1 jpg Category Meal Method Ingredients name 1 Cup Ice name 1 Bag Beans
  • 将属性从视图模型绑定到 Aurelia 中的自定义元素

    UPDATE 其他人报告说这个样本对他们来说效果很好 听起来好像我做错了什么 但我不再有代码 所以我无法检查问题出在哪里 原问题 我有以下自定义元素以及以下视图模型和视图 import bindable from aurelia frame
  • 如何在 AngularJS 中添加复选框的 ID?

    我正在开展一个学校项目 用户可以选择他 她可以从学校的计算机服务办公室借用哪些物品 我已经填写了申请表 学生 教师可以在其中插入他们的个人资料信息 我遇到了有关 AngularJS 中复选框的问题 我需要对复选框的 ID 进行总计 求和 以
  • 如何在 Android 中将文本更改为粗体?

    你如何改变文本 字体Android 中的设置TextView 例如 如何制作文本bold 要执行此操作 请在layout xml file android textStyle 例子 android textStyle bold italic
  • 将网络字节顺序(大端)转换为小端

    我发现以下功能MSDN http msdn microsoft com en us library windows desktop ms740069 28v vs 85 29 aspx它转换一个unsigned long从网络字节到unsi
  • Web 应用程序的 SQL Azure 故障转移/备份策略

    我正在使用 Azure 和 SQL Azure 构建一个 Web 应用程序 我正在设置它 以便每个组织都有自己的数据库 每个客户组织的流量为低到中等 我正在考虑使用 SQL Azure 数据同步作为故障转移 备份计划的一部分 以便在 SQL
  • 为什么 Fabric 没有初始化? java.lang.IllegalStateException:在使用 singleton() 之前必须初始化 Fabric

    我根据以下内容设置了 Firebase CrashlyticsFirebase Crashlytics 入门 https firebase google com docs crashlytics get started对于我的 Androi
  • Mac OSX 上 Sublime Text 2 的日志文件的位置是什么

    我正在尝试找出为什么 JSON 语法突出显示有时有效但并非总是有效 sublime text 2 是否有日志记录 You can access the console by hitting Ctrl that s the button to
  • pyenv 不会更改 mac 上的 python 版本

    我在 mac 上安装了 pyenv 并使用以下命令安装所需的 python 版本 pyenv install 3 8 0 pyenv global 3 8 0 我正在使用 zsh 我的 zshrc 文件包含以下内容 if command v
  • 在 C 中创建跨多个源文件注册函数的调度表

    如何用C实现动态调度表 https stackoverflow com questions 11840651 how can i implement a dynamic dispatch table in c 32192330 321923
  • 如何锁定导航抽屉?

    在我的应用程序中 我使用导航抽屉 它工作正常 但我想做的是 当互联网不可用时 用户不应该无法打开导航抽屉 任何人都可以帮助我如何解决这个问题 导航代码抽屉如下 public class MainActivity extends Activi