<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="应用程序列表" android:textSize="20dp" android:padding="5dp" android:background="@color/colorAccent" /> <ListView android:id="@+id/list_ctn_main" android:layout_width="match_parent" android:layout_height="match_parent" /> </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="wrap_content"> <ImageView android:id="@+id/app_logo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher"/> <TextView android:id="@+id/app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" android:layout_toRightOf="@id/app_logo" android:layout_centerVertical="true" android:textSize="20dp" /> </RelativeLayout>
public class AppInfo { private Drawable app_logo; private String name; private String packName; public AppInfo() { } public AppInfo(Drawable app_logo, String name, String packName) { this.app_logo = app_logo; this.name = name; this.packName = packName; } public Drawable getApp_logo() { return app_logo; } public void setApp_logo(Drawable app_logo) { this.app_logo = app_logo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPackName() { return packName; } public void setPackName(String packName) { this.packName = packName; } }
public class MainActivity extends AppCompatActivity { private ListView listView ; private List<AppInfo> data; private AppAdapter appAdapter; class AppAdapter extends BaseAdapter{ @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = View.inflate(MainActivity.this, R.layout.list_ctn, null); } AppInfo appInfo = data.get(position); ImageView imageView = (ImageView) convertView.findViewById(R.id.app_logo); TextView name = (TextView) convertView.findViewById(R.id.app_name); imageView.setImageDrawable(appInfo.getApp_logo()); name.setText(appInfo.getName()); return convertView; } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.list_ctn_main); data = getAllAppInfos(); AppAdapter appAdapter = new AppAdapter(); listView.setAdapter(appAdapter); } private List<AppInfo> getAllAppInfos() { List<AppInfo> list = new ArrayList<AppInfo>(); PackageManager packageManager = getPackageManager(); 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.add(appInfo); } return list; } }
单击事件
长按删除更新列表
setAdapter和notify**都可以实现重新显示,前者会跳到list顶部,是因为重新渲染的ui,后者会使用所有缓存的item对象,前者不会