应用列表
一、案例描述
1、考核知识点
ListView控件的使用
常用数据适配器
2、练习目标
Ø 掌握ListView展示数据
3、需求分析
应用的安装和卸载应用实现了将两个应用显示在界面上的功能,如果要把手机上所有应用都展示在手机上使用基本控件很难实现,展示列表型的数据可以使用ListView控件。
4、设计思路(实现原理)
1)获取设备上安装的所有应用列表,将列表使用ListView展示在界面上。
二、案例实现
(1)应用列表程序
创建“应用列表”程序,首先创建MainActivity用于显示信息,该程序的界面如图5-6所示。

图5-1 主界面
主界面对应的布局文件(activity_main)如下所示:
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
(2)编写逻辑代码
MainActivity的代码如下所示:
1 public class MainActivityextends Activity {
2 private List<UserAPPInfo> allAppList;
3 private MyAdapter adapter;
4 private PackageManager pManager;
5 @Override
6 protected void onCreate(Bundle savedInstanceState) {
7 super.onCreate(savedInstanceState);
8 setContentView(R.layout.activity_main);
9 getAppMessage();
10 ListView listView = (ListView) findViewById(R.id.listview);
11 adapter = new MyAdapter();
12 listView.setAdapter(adapter);
13 }
14 private void getAppMessage() {
15 pManager = getPackageManager();
16 List<PackageInfo> packages = getPackageManager()
17 .getInstalledPackages(0);
18 allAppList = new ArrayList<UserAPPInfo>();
19 for (int i = 0; i < packages.size(); i++) {
20 PackageInfo packageInfo = packages.get(i);
21 UserAPPInfo userInfo = new UserAPPInfo();
22 String name = packageInfo.applicationInfo.loadLabel(
23 getPackageManager()).toString();
24 userInfo.setName(name);
25 userInfo.setPakName(packageInfo.packageName);
26 userInfo.setCode(packageInfo.versionName);
27 userInfo.setIco(drawableToBitmap(packageInfo.applicationInfo
28 .loadIcon(getPackageManager())));
29 allAppList.add(userInfo);
30 }
31 }
32 private class MyAdapter extends BaseAdapter {
33 @Override
34 public int getCount() {
35 return allAppList.size();
36 }
37 @Override
38 public Object getItem(int position) {
39 return allAppList.get(position);
40 }
41 @Override
42 public long getItemId(int position) {
43 return position;
44 }
45 @Override
46 public View getView(int position, View convertView, ViewGroupparent) {
47 View item = convertView != null ? convertView :View.inflate(
48 MainActivity.this, R.layout.listview_item, null);
49 TextView tv_name = (TextView)item.findViewById(R.id.tv_name);
50 TextView tv_pakName = (TextView)item.findViewById(R.id.tv_pakName);
51 ImageView iv_ico = (ImageView)item.findViewById(R.id.iv_ico);
52 tv_name.setText(allAppList.get(position).getName());
53 tv_pakName.setText(allAppList.get(position).getPakName());
54 iv_ico.setImageBitmap(allAppList.get(position).getIco());
55 return item;
56 }
57 }
58 public static Bitmap drawableToBitmap(Drawable drawable) {
59 Bitmap bitmap = Bitmap
60 .createBitmap(
61 drawable.getIntrinsicWidth(),
62 drawable.getIntrinsicHeight(),
63 drawable.getOpacity() != PixelFormat.OPAQUE ?
64 Bitmap.Config.ARGB_8888
65 : Bitmap.Config.RGB_565);
66 Canvas canvas = new Canvas(bitmap);
67 drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
68 drawable.getIntrinsicHeight());
69 drawable.draw(canvas);
70 return bitmap;
71 }
72 }
当手指向下滑动,会展示出手机上所安装的所有应用。
三、案例总结
1、ListView必须设置id属性才能将数据显示在页面上。

