zoukankan      html  css  js  c++  java
  • Menu学习,和如何实现一步关闭所有的activity退出应用程序

    1首先介绍如何写menu,若想在activity里添加menu按钮时,在activity里覆写下面2个方法:

    public boolean onCreateOptionsMenu(Menu menu)和public boolean onOptionsItemSelected(MenuItem item),并且在onCreateOptionsMenu加载menu的xml界面。xml界面在res文件下menu文件夹里创建一个xml文件添加menu的选项,也可以为选项添加图标,如下文件。然后在onOptionsItemSelected实现点击相应条目后的操作。

    <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        tools:context="com.example.demo.MainActivity" >
    
        <item
            android:id="@+id/close_all"
            android:title="完全退出"
           />
    	<item
            android:id="@+id/close_this"
            android:title="完全当前"
           />
    </menu>
    

     2、当应用程序开启很多activity时候,想要退出就必须按很多次返回键,我们可以在menu实现一步退出:

    退出有三种方式:

     

    经过测试:1虽然能关闭程序但不会清空任务栈,也就是退出失败。2也无法实现程序完全退出。3需要权限,多用于安全管家之类的软件,它只能关闭其他的应用程序,不能关闭自己的应用程序,注意还需要权限

      3、为了实现程序的全部退出:

    (1)我们可以定义个类App,继承Application,它是应用程序的实例,只要程序存活就存在,在里面定义一个用于存入所有activity的集合成员变量,并且覆写该类的oncreat方法(只在应用程序第一次运行时调用)在里面实例化这个成员变量。

    (2)APP类创建好后,打开清单文件,点击application,然后点击name后面的browse预览,就会加载出刚刚写app类,点击选中点击ok就会将App这个实例配置到清单文件的application内:

    (3)然后在每个activity的oncreat方法里,把该activity添加到App的集合里 ,在Ondestroy()里从集合里删除该activity。最后在点击menu里的“完全退出”的时候,就finish掉所有的activity即可。

      4、demo如下:实现了上面所讲到的:

    1、activity1和activity2的xml文件都是一个textview和button一个是显示第几个activity,一个是点击激活另一个activity的,因此这里就不给出了。

    2、App类:

    public class App extends Application {
    	//记录所有的activity的集合
    	 ArrayList<Activity>activities;
    	//private
    	//创建整个应用程序的全局实例,
    	//在整个程序第一次创建时候执行
    	@Override
    	public void onCreate() {
    		activities=new ArrayList<Activity>();
    		super.onCreate();
    	}
    	
    }
    

     3  MainActivity的java文件:,在Activity2里也是在oncreat方法里吧activity加到集合,然后ondestroy里移除activity,因此这里就只给出MainActivity文件

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            App app=(App) getApplication();
            app.activities.add(this);
            setContentView(R.layout.activity_main);
        }
        
        public void start2(View v)
        {
        	Intent intent=new Intent();
        	intent.setClassName("com.example.demo", "com.example.demo.Activity2");
        	startActivity(intent);
        }
    
    	@Override  //实现value的界面加载
    	public boolean onCreateOptionsMenu(Menu menu) {
    		MenuInflater inflater=new MenuInflater(this);
    		inflater.inflate(R.menu.main, menu);
    		return super.onCreateOptionsMenu(menu);
    	}
    
    	@Override//实现menue的点击事件:当前退出,和完全退出
    	public boolean onOptionsItemSelected(MenuItem item) {
    		
    		switch (item.getItemId()) {
    		case R.id.close_all:
    			App app=(App) getApplication();			
    			for(Activity act:app.activities)
    				act.finish();
    //   打印结果证明:activity被finish掉后,app.activities里的activity对象并没被移除,它finish是操作任务栈的activity,
    //			因此可以用高级for循环
    			System.out.println(app.activities.size());
    			break;
    
    		case R.id.close_this:
    			finish();
    			break;
    		default:
    			break;
    		}
    		
    		return super.onOptionsItemSelected(item);
    	}
    
    	@Override//当按返回键等时候就会销毁该activity因此也要移除集合里的activity
    	protected void onDestroy() {
    		App app=(App) getApplication();
    		app.activities.remove(this);
    		super.onDestroy();
    	}        
    }
    

      

  • 相关阅读:
    mongdb 备份还原导入导出
    mongodb副本集(选举,节点设置,读写分离设置)
    mongodb副本集的内部机制(借鉴lanceyan.com)
    sqlserver 登录记录(登录触发器)
    wmic命令用法小例
    mysql查询相关的命令解析
    学习笔记:APP 瘦身 & 增加bitcode支持编译第三方框架
    关于Git的一些学习笔记
    [转]Xcode中LLDB的使用
    Swift学习笔记(2):willSet与didSet
  • 原文地址:https://www.cnblogs.com/bokeofzp/p/4760639.html
Copyright © 2011-2022 走看看