2012-05-03 2 views
3

私はアンドロイド携帯電話にインストールされているアプリケーションのチックボックスを使用してリストビューを作成しようとしています。 リストビューの上に置くためにその後アプリケーションのアイコンを一覧表示するにはどうすればよいですか?

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

を次のように私は私がこれを使用、ArrayListの中にアイコンを置きます。

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

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

ただし、強制的に閉じ、問題はicon.setImageDrawable(icons.get(position))にあります。 どうすれば解決できますか?

+0

Eclipseで 'adb logcat'、DDMS、またはDDMSパースペクティブを使用してLogCatを調べ、「強制終了」に関連するスタックトレースを確認します。特に、発生した例外の名前を見てください。あなたが言及した行で 'NullPointerException'を取得している場合は、EclipseのメインメニューからProject> Cleanを選択するか、コマンドラインビルドのために' ant clean'を実行してみてください。 – CommonsWare

+0

もう少し遅いですが、この1つをよく見てください http://www.androprogrammer.com/2013/10/list-view-with-check-box-using-custom.html – buckau

答えて

16

が、これはこれは、Androidアプリケーションのアイコンの一覧を取得する方法である

すべてのアプリケーションのResolveInfoのリストを取得するにはアプリケーション

のアイコンのリストを取得するために私の解決策をチェックしてみて下さいこの例があなたに役立つことを願っています。

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

} 
+0

@NoraHarbは私の更新された回答を見てください。それが完全にあなたのために働くことを願っています –

関連する問題