[英]How can I get the icons of the applications in a list?
我正在嘗試使用chechboxes為Android手機上的已安裝應用程序制作列表視圖。 我將圖標放在ArrayList中,如下所示
packs = new ArrayList<String>(); // a list of all the packages
names = new ArrayList<String>(); // a list of all the apps names
icons = new ArrayList<Drawable>(); // a list of all apps drawable images
List<ApplicationInfo> packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo packageInfo : packages) {
if ((packageInfo.flags & ApplicationInfo.FLAG_SYSTEM) !=1){ // 'if' is to remove all system applications
packs.add((String) packageInfo.packageName);
names.add((String) packageManager.getApplicationLabel(packageInfo));
icons.add((Drawable) packageManager.getApplicationIcon(packageInfo));
然后把它放在listview上,我用它。
icon = (ImageView) row.findViewById(R.id.appIcon);
icon.setImageDrawable(icons.get(position));
但是,它強制關閉,問題出在icon.setImageDrawable(icons.get(position)); 我該如何解決?
請查看我的解決方案以獲取應用程序圖標列表
在此獲取所有應用程序的ResolveInfo
列表
這是獲取android中應用程序圖標列表的方法,希望這個例子對你有所幫助。
import java.util.List;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class IconListActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadApps();
}
private void loadApps() {
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> mApps = getPackageManager().queryIntentActivities(mainIntent, 0);
ListView listView = getListView();
listView.setAdapter(new AppsAdapter(this,mApps));
}
public class AppsAdapter extends BaseAdapter {
private LayoutInflater inflater;
private List<ResolveInfo> mApps;
public AppsAdapter(Context context, List<ResolveInfo> mApps) {
this.inflater = LayoutInflater.from(context);
this.mApps = mApps;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHendler hendler;
if (convertView == null) {
convertView = inflater.inflate(R.layout.row_view, null);
hendler = new ViewHendler();
hendler.textLable = (TextView)convertView.findViewById(R.id.textViewLable);
hendler.iconImage = (ImageView)convertView.findViewById(R.id.imageViewIcon);
convertView.setTag(hendler);
} else {
hendler = (ViewHendler)convertView.getTag();
}
ResolveInfo info = this.mApps.get(position);
hendler.iconImage.setImageDrawable(info.loadIcon(getPackageManager()));
hendler.textLable.setText(info.loadLabel(getPackageManager()));
return convertView;
}
class ViewHendler{
TextView textLable;
ImageView iconImage;
}
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;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.