第三课 启动安装的应用程序
1. 监听GridView的onItemClick事件
设置一个监听器是为了当gridView的某项被点击时,会有一个回调函数通知我们。
我们调用mGrid.setOnItemClickListener(listener); 设置一个监听器
mGrid.setOnItemClickListener(listener)中的listener是一个接口,其类型为:android.widget.AdapterView.OnItemClickListener,如下图所示:
下面我们new一个android.widget.AdapterView.OnItemClickListener类型的对象作为参数。我们直接使用eclipde的自动补全功能来完成OnItemClickListener 的定义:
接口OnItemClickListener 中有一个方法叫做onItemClick,我们实现它即可。下面我对onItemClick的几个参数略作说明:
parent 略
view 被点击的view
position 被点击项的位置
id 被点击项的id
2.启动被点击应用的activity
一般来讲,我们根据position即可知道被点击的项目是哪一项了。现在我们根据被点击的项目,取出对应的应用程序数据(主要是其中的主activity),然后启动activity。用下面代码实现:
例如,我们点击计算器时,启动了计算器,如下图:
现在整个类代码如下:
1. 监听GridView的onItemClick事件
设置一个监听器是为了当gridView的某项被点击时,会有一个回调函数通知我们。
我们调用mGrid.setOnItemClickListener(listener); 设置一个监听器
mGrid.setOnItemClickListener(listener)中的listener是一个接口,其类型为:android.widget.AdapterView.OnItemClickListener,如下图所示:

下面我们new一个android.widget.AdapterView.OnItemClickListener类型的对象作为参数。我们直接使用eclipde的自动补全功能来完成OnItemClickListener 的定义:
1
2
3
4
5
|
private
OnItemClickListener listener =
new
OnItemClickListener() {
@Override
public
void
onItemClick(AdapterView<?> parent, View view,
int
position,
long
id) {
}
};
|
接口OnItemClickListener 中有一个方法叫做onItemClick,我们实现它即可。下面我对onItemClick的几个参数略作说明:
parent 略
view 被点击的view
position 被点击项的位置
id 被点击项的id
2.启动被点击应用的activity
一般来讲,我们根据position即可知道被点击的项目是哪一项了。现在我们根据被点击的项目,取出对应的应用程序数据(主要是其中的主activity),然后启动activity。用下面代码实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@Override
public
void
onItemClick(AdapterView<?> parent, View view,
int
position,
long
id) {
ResolveInfo info = mApps.get(position);
//该应用的包名
String pkg = info.activityInfo.packageName;
//应用的主activity类
String cls = info.activityInfo.name;
ComponentName componet =
new
ComponentName(pkg, cls);
Intent i =
new
Intent();
i.setComponent(componet);
startActivity(i);
}
|
例如,我们点击计算器时,启动了计算器,如下图:

现在整个类代码如下:
- package org.bangchui.myhome;
- import java.util.List;
- import android.app.Activity;
- import android.content.ComponentName;
- import android.content.Intent;
- import android.content.pm.ResolveInfo;
- import android.os.Bundle;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.AdapterView;
- import android.widget.BaseAdapter;
- import android.widget.GridView;
- import android.widget.ImageView;
- import android.widget.AdapterView.OnItemClickListener;
- public class MyHome extends Activity {
- private List<ResolveInfo> mApps;
- GridView mGrid;
- private OnItemClickListener listener = new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
- ResolveInfo info = mApps.get(position);
- //该应用的包名
- String pkg = info.activityInfo.packageName;
- //应用的主activity类
- String cls = info.activityInfo.name;
- ComponentName componet = new ComponentName(pkg, cls);
- Intent i = new Intent();
- i.setComponent(componet);
- startActivity(i);
- }
- };
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- loadApps();
- setContentView(R.layout.main);
- mGrid = (GridView) findViewById(R.id.apps_list);
- mGrid.setAdapter(new AppsAdapter());
- mGrid.setOnItemClickListener(listener);
- }
- private void loadApps() {
- Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
- mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
- mApps = getPackageManager().queryIntentActivities(mainIntent, 0);
- }
- public class AppsAdapter extends BaseAdapter {
- public AppsAdapter() {
- }
- public View getView(int position, View convertView, ViewGroup parent) {
- ImageView i;
- if (convertView == null) {
- i = new ImageView(MyHome.this);
- i.setScaleType(ImageView.ScaleType.FIT_CENTER);
- i.setLayoutParams(new GridView.LayoutParams(50, 50));
- } else {
- i = (ImageView) convertView;
- }
- ResolveInfo info = mApps.get(position);
- i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
- return i;
- }
- public final int getCount() {
- return mApps.size();
- }
- public final Object getItem(int position) {
- return mApps.get(position);
- }
- public final long getItemId(int position) {
- return position;
- }
- }
- }