¿Cómo puedo obtener los iconos de las aplicaciones en una lista?

Estoy tratando de hacer una vista de lista con casillas de verificación para las aplicaciones instaladas en el teléfono Android. Puse los íconos en un ArrayList de la siguiente manera

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));

Luego, para ponerlo en la vista de lista, uso esto.

icon = (ImageView) row.findViewById(R.id.appIcon);

icon.setImageDrawable(icons.get(position));

Sin embargo, fuerza el cierre y el problema está en icon.setImageDrawable(icons.get(position)); ¿Cómo puedo resolverlo?

preguntado el 03 de mayo de 12 a las 16:05

Utiliza adb logcat, DDMS o la perspectiva de DDMS en Eclipse para examinar LogCat y ver el seguimiento de la pila asociado con su "cierre forzado". En particular, observe el nombre de la excepción que se generó. Si estás recibiendo un NullPointerException en la línea que mencionó, intente limpiar su proyecto - Proyecto> Limpiar desde el menú principal de Eclipse, o ant clean para compilaciones de línea de comandos. -

un poco tarde pero echa un vistazo a este es bueno androprogrammer.com/2013/10/… -

1 Respuestas

Consulte mi solución para obtener la lista de íconos de la aplicación

En esta obteniendo la lista de ResolveInfo de toda aplicación

Esta es la forma de obtener la lista de íconos de la aplicación en Android, espero que este ejemplo le sea útil.

importar 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;
        }
    }

}

contestado el 17 de mayo de 17 a las 11:05

@NoraHarb mira mi respuesta actualizada. Espero que funcione completamente para usted. - ashish dwivedi

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.