zoukankan      html  css  js  c++  java
  • Android中的Fragment使用

    概述:

        最近在写一个应用,要用到Fragment,我对于这一块还是有一点陌生,因为之前一直用的是Activity。不过,这几天我也是各种上网查和问其他人完成了这个小程序。

        程序的主要功能是在一个FragmentActivity中添加四个Fragment,再每个Fragment中去显示相应的手机信息。如:手机当前电量、手机内存占用率、获取手机上的已安装的应用程序名称等。


    代码示例:

    在FragmentActivity中加载第Fragment的方法是:

    // 定义一个Fragment管理器
    		FragmentManager fragmentManager = getSupportFragmentManager();
    		// 得到在XML中定义的Fragment
    		Fragment barreryFragment = fragmentManager.findFragmentById(R.id.fragment_barrery);
    		// fragmentBarrery是否为空,
    		// 若为空,那就重新加载一个,然后进行一个匹配,
    		// 最后提交
    		if (null == barreryFragment) {
    			barreryFragment = new BarreryFragment();
    			fragmentManager.beginTransaction()
    				.add(R.id.fragment_barrery, barreryFragment)
    				.commit();
    		}

    基本上我们的FragmentActivity类只是去加载这4个Fragment,另外三个Fragment的加载在这里就不缀述了。


    获取手机电量:

    值得一提的是如何获得手机的电池电量值。Android其实没有直接提供给我们一个方法去调用就可以得到电池的电量,它需要去实现注册和接收广播才能够实现获得电池的电量。而其实是当手机的电量改变时,Android系统自身就会发出一个广播,我们需要实现一个接收广播的程序就可以获得电池电量的变化了。下面是这个接收广播的核心代码:

    public void receiveBarreryBroadcast()
    	{
    		BroadcastReceiver receiveBarrery = new BroadcastReceiver() {
    			
    			@Override
    			public void onReceive(Context context, Intent intent) {
    
    				if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction()))
    				{
    					// 获取当前电量
    					int current = intent.getExtras().getInt("level");
    					
    					// 获得总电量
    					int total = intent.getExtras().getInt("scale");
    					
    					// 计算当前电量的比率
    					double barreryDump = (current * 100.0) / total;
    					
    					// 修改第一个Fragment中的TextView文本信息
    					BarreryFragment.this.state.setText("剩余电量为:" + Math.round(barreryDump) + "%");
    				}
    			}
    		};


    注册广播:

    // 注册电池电量改变的广播
    		IntentFilter barreryFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    		BarreryFragment.this.getActivity().registerReceiver(receiveBarrery, barreryFilter);
    其实注册广播还可以在XML文件中去配置,这里就不再给出,需要的朋友可以去网上去查,都有的。

    还有一个就是如何获得手机上已安装应用程序的名称呢?

    这个倒很简单,只要几行代码就可以实现了。如下:

    PackageManager packageManager = null;
    		List<PackageInfo> packsList = null;
    		int appCount = 0;
    		
    		// 得到本机上一共有多少个应用程序被安装
    		packageManager = getActivity().getPackageManager();
    		packsList = packageManager.getInstalledPackages(0);
    		
    		// 得到应用程序的数目
    		appCount = packsList.size();
    		
    		// 循环添加将单个的AppInfo对象到AppInfo队列中
    		String[] appName = new String[appCount];
    		
    		for (int i = 0; i < appCount; ++i) {
    			PackageInfo packageInfo = packsList.get(i);
    			// 得到应用程序名称,再赋值给appName
    			appName[i] = packageInfo.applicationInfo.loadLabel(packageManager).toString();
    		}
    大家可以看到上面的代码中有这样的一句:

    pckMan = getActivity().getPackageManager();
    这个地方我们用到了一个getActivity方法, 原因是因为getPackageManager这个方法不能在Fragment中去使用,只能用于Activity。而getActivity这个方法,就是得到这个Fragment所以在Activity(FragamentActivity)。


    源代码分享:

    本程序源码分享:点击打开链接

    效果图(这里的电量为0%的原因可能是因为这是在虚拟机上测试的结果,放在真机上是可行的):


  • 相关阅读:
    Spring事务配置的五种方式(转)
    struts.properties配置详解(转)
    Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法(转)
    php的ob函数实现页面静态化
    冒泡排序法原理讲解及PHP代码示例
    Linux Centos下编译安装Redis
    PHP判断是手机端还是PC端
    windows 下 Symfony的下载与安装
    JS在线生成二维码
    关于微信分享到朋友圈(Thinkphp-tp3.2框架下实现)
  • 原文地址:https://www.cnblogs.com/fengju/p/6336158.html
Copyright © 2011-2022 走看看