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%的原因可能是因为这是在虚拟机上测试的结果,放在真机上是可行的):


原文地址:https://www.cnblogs.com/fengju/p/6336158.html