2011-04-10 3 views
2

J'essaie d'afficher une liste de tâches de cette manière -Android - Comment obtenir une icône d'une application?

Icône | ApplicationName | CheckBox

Comme je n'ai trouvé aucun adaptateur listview le supporte, j'ai donc décidé de développer un adaptateur personnalisé mais je suis incapable de récupérer l'icône d'une application. Jusqu'à présent, j'essayé ceci: -

public View getView(int position, View convertView, ViewGroup parent) 
{ 
    View v = convertView; 
    View row = inflater.inflate(R.layout.item, parent, false); 
    CheckedTextView ctb = (CheckedTextView)row.findViewById(R.id.checkText); 
    String pkgName = "com.abc.abc"; 

    ctb.setText("bla bla"); 
    ImageView iv = (ImageView)row.findViewById(R.id.image); 
    List<PackageInfo> pkgs = activity.getPackageManager().getInstalledPackages(0); 
    for(PackageInfo p : pkgs) 
    { 
     if(p.packageName.equals(pkgName)) 
     { 
      Drawable d = p.applicationInfo.loadIcon(pm); 
      iv.setImageDrawable(d); 
     } 
    } 

    return row; 
} 
} 

Et je suis sûr que je suis en train quelque chose de stupide dans ce code. S'il vous plaît essayez d'attraper tout ce que je fais mal.

Merci.

Répondre

6

Vous pouvez obtenir l'icône d'une application (de paquet) avec:

String pkg = "com.app.my"; 
Drawable icon = getContext().getPackageManager().getApplicationIcon(pkg); 
+0

bigstones Merci, son travail aimez le charme maintenant. :) – Varundroid

+1

@Varundroid J'ai été là, lol. – bigstones

+0

lol. acclamations mate. et s'il vous plaît aidez-moi un peu plus comme je suis coincé à nouveau: P mon adaptateur personnalisé a aussi une case à cocher et je viens de le définir dans le XML de mon adaptateur personnalisé et a noté avec mon adaptateur personnalisé. mais le problème est de savoir comment vérifier que la case à cocher est cochée ou non dans le programme où j'utilise réellement cet adaptateur personnalisé. Ai-je besoin de le lier avec du code? J'ai utilisé simple_list_item_multiple_choice avant et je veux le même travail. c'est possible? s'il vous plaît aidez si vous savez comment le faire sinon j'apprécie vraiment vos efforts. Merci :) – Varundroid

2

S'il vous plaît vérifier ma solution pour obtenir la liste de l'icône de l'application

Dans cette obtenir la liste des ResolveInfo de toutes les applications.

La classe resolveInfo contient des informations renvoyées à partir de la résolution d'une intention contre un IntentFilter. Cela correspond en partie aux informations collectées à partir des balises

du AndroidManifest.xml Ceci est la façon d'obtenir la liste de l'icône de l'application dans Android, espérons que cet exemple sera l'aide pour vous

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

} 
Questions connexes