1. 监听GridView的onItemClick事件
设置一个监听器是为了当gridView的某项被点击时,会有一个回调函数通知我们。
我们调用appsGrid.setOnItemClickListener(listener); 设置一个监听器
appsGrid.setOnItemClickListener(listener)中的listener是一个接口,其类型为:android.widget.AdapterView.OnItemClickListener

下面我们new一个android.widget.AdapterView.OnItemClickListener类型的对象作为参数。我们直接使用eclipde的自动补全功能来完成OnItemClickListener 的定义:
private OnItemClickListener listener = new OnItemClickListener() {        @Override        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {        }    }



接口OnItemClickListener 中有一个方法叫做onItemClick,我们实现它即可。下面我对onItemClick的几个参数略作说明:
parent 略
view被点击的view
position 被点击项的位置
id 被点击项的id

2.启动被点击应用的activity

一般来讲,我们根据position即可知道被点击的项目是哪一项了。现在我们根据被点击的项目,取出对应的应用程序数据(主要是其中的主activity),然后启动activity。用下面代码实现:
?
private OnItemClickListener clickListener = new OnItemClickListener() {        @Override        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {            ResolveInfo info = apps.get(i);            //该应用的包名            String pkg = info.activityInfo.packageName;            //应用的主activity类            String cls = info.activityInfo.name;            ComponentName componet = new ComponentName(pkg, cls);            Intent intent = new Intent();            intent.setComponent(componet);            startActivity(intent);        }    };

private OnItemClickListener clickListener = new OnItemClickListener() {        @Override        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {            ResolveInfo info = apps.get(i);            //该应用的包名            String pkg = info.activityInfo.packageName;            //应用的主activity类            String cls = info.activityInfo.name;            ComponentName componet = new ComponentName(pkg, cls);            Intent intent = new Intent();            intent.setComponent(componet);            startActivity(intent);        }    };

代码中的中文注释可能会引起Gradle报错


解决办法:http://blog.csdn.net/sljjyy/article/details/11976099

现在整个类代码如下:

package com.sljjyy.sao.launcher;import android.content.ComponentName;import android.content.Intent;import android.content.pm.ResolveInfo;import android.os.Bundle;import android.app.Activity;import android.view.Menu;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;import java.util.List;public class MainActivity extends Activity {    GridView appsGrid;    private List<ResolveInfo> apps;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        loadApps();        appsGrid = (GridView) findViewById(R.id.apps_list);        appsGrid.setAdapter(new AppsAdapter());        appsGrid.setOnItemClickListener(clickListener);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    private OnItemClickListener clickListener = new OnItemClickListener() {        @Override        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {            ResolveInfo info = apps.get(i);            //该应用的包名            String pkg = info.activityInfo.packageName;            //应用的主activity类            String cls = info.activityInfo.name;            ComponentName componet = new ComponentName(pkg, cls);            Intent intent = new Intent();            intent.setComponent(componet);            startActivity(intent);        }    };    private void loadApps() {        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);        new ImageView(MainActivity.this);        apps = getPackageManager().queryIntentActivities(mainIntent, 0);    }    public class AppsAdapter extends BaseAdapter {        public AppsAdapter(){        }        @Override        public int getCount() {            return apps.size();        }        @Override        public Object getItem(int i) {            return apps.get(i);        }        @Override        public long getItemId(int i) {            return i;        }        @Override        public View getView(int i, View view, ViewGroup viewGroup) {            ImageView iv;            if(view == null){                iv = new ImageView(MainActivity.this);                iv.setScaleType(ImageView.ScaleType.FIT_CENTER);                iv.setLayoutParams(new GridView.LayoutParams(50, 50));            } else {                iv = (ImageView) view;            }            ResolveInfo info = apps.get(i);            iv.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));            return iv;        }    }}

android手把手教你开发launcher(一)(AndroidStudio版)

android手把手教你开发launcher(二)——列出安装的应用程序

android手把手教你开发launcher(三)——启动安装的应用程序

android手把手教你开发launcher(四)——显示widget

android手把手教你开发launcher(五)——设置壁纸


转自:http://www.bangchui.org/read.php?tid=12208

更多相关文章

  1. Android应用程序永久获取root权限方法
  2. [Android]代码实现ColorStateList及StateListDrawable
  3. Android 完全退出应用程序实现代码
  4. Android 界面开发---控件事件监听器、按键处理
  5. Eclipse中跟踪调试Android Framework源代码
  6. Android应用程序内存优化
  7. Android Studio 手动创建活动(Activity) 第一行代码 第二章

随机推荐

  1. zabbix-agent安装配置------------------
  2. zabbix server 内存溢出 @第一次遇到
  3. TCP/IP 三次握手 四次握手
  4. weadmin
  5. windows server 2016安装网卡驱动【引用
  6. Mysql windows 下载安装教程
  7. zabbix-server centos7 (实用
  8. CF卡磁盘结构损坏怎么办 ,磁盘结构损坏的
  9. IIS7设置http跳转到https重定向的方法
  10. jQuery常用dom操作