所有应用
所有应用
public class MainActivity extends Activity { private ListView lv_main;//列表控件 private List<AppInfo> data;//数据源,数据的结合 private AppAdapter adapter;//适配器
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv_main=(ListView) findViewById(R.id.lv_main); data=getAllAppInfos(); adapter = new AppAdapter(); //显示列表 lv_main.setAdapter(adapter); //给listView设置Item的点击监听 lv_main.setOnItemClickListener(new OnItemClickListener() { /*parent * view 当前视图行的Item视图对象 * position 当前行的下标 * @see android.widget.AdapterView.OnItemClickListener#onItemClick(android.widget.AdapterView, android.view.View, int, long) */
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 显示当前行的应用名称 String appName = data.get(position).getAppName(); //提示 Toast.makeText(MainActivity.this, appName, Toast.LENGTH_SHORT).show(); } }); //给listview设置Item的长按监听 lv_main.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { /** * 删除当前行 * 删除当前行的数据 */ data.remove(position); //更新列表 // adapter.notifyDataSetChanged();//通知适配器更新列表,使用所有缓存的Item的视图对象 return true; } }); } /* * 得到手机中所有应用信息的列表 * AppInfo * Drawable icon 图片对象 * String appName 应用名称 * String packageName */ protected List<AppInfo> getAllAppInfos() {
List<AppInfo> list = new ArrayList<AppInfo>(); // 得到应用的packgeManager PackageManager packageManager = getPackageManager(); // 创建一个主界面的intent Intent intent = new Intent(); intent.setAction(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); // 得到包含应用信息的列表 List<ResolveInfo> ResolveInfos = packageManager.queryIntentActivities( intent, 0); // 遍历 for (ResolveInfo ri : ResolveInfos) { // 得到包名 String packageName = ri.activityInfo.packageName; // 得到图标 Drawable icon = ri.loadIcon(packageManager); // 得到应用名称 String appName = ri.loadLabel(packageManager).toString(); // 封装应用信息对象 AppInfo appInfo = new AppInfo(icon, appName, packageName); // 添加到list list.add(appInfo); } return list; } class AppAdapter extends BaseAdapter{
@Override public int getCount() { // TODO Auto-generated method stub return data.size(); }
@Override public Object getItem(int position) { // TODO Auto-generated method stub return data.get(position); }
@Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } //返回带数据当前行的Item视图对象 @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; // 如果convertView是null,加载Item的布局文件 if (convertView==null) { convertView = View.inflate(MainActivity.this, R.layout.item, null); holder = new ViewHolder(); //得到当前行需要更新的子view对象 holder.imageView = (ImageView) convertView.findViewById(R.id.lv_item_icon); holder.textView = (TextView) convertView.findViewById(R.id.tv_item_name); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } //得到当前行数据对象 AppInfo appInfo =data.get(position); //给视图绑定数据 holder.imageView.setImageDrawable(appInfo.getIcon()); holder.textView.setText(appInfo.getAppName()); //返回convertView return convertView; } class ViewHolder{ ImageView imageView; TextView textView; } } }
package com.example.app03_all;
import android.graphics.drawable.Drawable;
/** * 应用信息的封装类 * @author Administrator * */
public class AppInfo { private Drawable icon; private String appName; private String packageName;//包名 public AppInfo() { super(); } public AppInfo(Drawable icon, String appName, String packageName) { super(); this.icon = icon; this.appName = appName; this.packageName = packageName; } public Drawable getIcon() { return icon; } public void setIcon(Drawable icon) { this.icon = icon; } public String getAppName() { return appName; } public void setAppName(String appName) { this.appName = appName; } public String getPackageName() { return packageName; } public void setPackageName(String packageName) { this.packageName = packageName; }
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" >
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="所有应用" android:textSize="25sp" android:textColor="#FFFFFF" android:background="#C610EF" android:padding="5dp"/>
<ListView android:id="@+id/lv_main" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/lv_item_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" />
<TextView android:id="@+id/tv_item_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/lv_item_icon" android:text="应用名称" android:textSize="20sp" />
</RelativeLayout>