Android中的Fragment使用

来源:互联网 发布:在淘宝上买黄金可靠吗 编辑:程序博客网 时间:2024/06/08 05:37

概述:

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

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


代码示例:

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

// 定义一个Fragment管理器FragmentManager fragmentManager = getSupportFragmentManager();// 得到在XML中定义的FragmentFragment 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() {@Overridepublic 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);// 得到应用程序名称,再赋值给appNameappName[i] = packageInfo.applicationInfo.loadLabel(packageManager).toString();}
大家可以看到上面的代码中有这样的一句:

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


源代码分享:

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

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


1 0
原创粉丝点击