2011-04-10 29 views
2

我想用這種方式來顯示任務列表 -Android的 - 如何得到一個應用程序的圖標?

圖標| ApplicationName |複選框

因爲我發現沒有任何的ListView適配器支持這個,所以我決定開發一個定製的適配器,但我無法獲取應用程序的圖標。到目前爲止,我想這: -

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

,我相信我正在嘗試一些在此代碼愚蠢的。請嘗試捕捉我做錯的任何事情。

謝謝。

回答

6

你可以得到一個應用程序的(包的)圖標,:

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

由於bigstones,其工作像現在的魅力。 :) – Varundroid 2011-04-10 14:57:59

+1

@Varundroid我去過那裏,哈哈。 – bigstones 2011-04-10 14:59:32

+0

哈哈。隊友的歡呼聲。 請再幫我一點,因爲我再次卡住了:P 我的自定義適配器也有複選框,我只是將它定義在我的自定義適配器的XML中,並在我的自定義適配器類中記錄了它。但問題是如何知道複選框被選中,或者在我實際上使用這個自定義適配器程序不檢查。我是否需要將它與一些代碼綁定?我以前使用過simple_list_item_multiple_choice,我想要同樣的工作。可能嗎? 請幫助,如果你知道如何去做,否則我真的很感謝你的努力。 謝謝:) – Varundroid 2011-04-10 15:13:21

2

請看看我的解決方案,讓應用

的圖標讓所有應用程序的 ResolveInfo名單列表

在此。

resolveInfo類包含的是從解決對一個IntentFilter的意圖返回的信息。這部分對應於從AndroidManifest.xml中的標籤

這是獲得在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; 
     } 
    } 

} 
相關問題