2011-06-28 32 views
0

私はユーザーがインストールしたアプリケーションのリストを持っています。削除するボタンをクリックすると削除されたと表示されますが、リストビューに戻るとアイコンがリストビューに表示され、クリックしようとするとアプリがアンインストールされたことが示されます。私はそれを削除した後、それをリストビューから削除させるにはどうすればよいですか?Androidをリストビューから削除してから削除する

私は活動の静的リストを返すqueryIntentActivities()いくつかのコード

public void update() { 
    // TODO 
    mAppListAdapter.clear(); 

    Intent aIntent = new Intent(Intent.ACTION_MAIN, null); 
    aIntent.addCategory(Intent.CATEGORY_LAUNCHER); 

    PackageManager aPackageManager = getPackageManager(); 
    List <ResolveInfo> aList = aPackageManager.queryIntentActivities(aIntent, PackageManager.GET_UNINSTALLED_PACKAGES); 





    for(ResolveInfo rInfo : aList) { 
     if (!isSystemPackage(rInfo)) 
     mAppListAdapter.add(rInfo.activityInfo.applicationInfo); 
     //for (int n=0;n<aList.size();n++) {   
       //if((aList.get(n).flags & ApplicationInfo.FLAG_SYSTEM)!=1) 

     System.out.println("Installed Applications " + rInfo.activityInfo.applicationInfo.loadLabel(aPackageManager).toString()); 
    } 

    if(mListView != null) { 
     mListView.setAdapter(mAppListAdapter); 



    } 
    } 

答えて

1

であるかに

ここに私のリストビューが、不明な点を更新したいです。このリストは処理中ですが、リストを取得してからインストールされているアプリケーションが変更されているため、内容が背後で変更されることはありません。

アクティビティの変更を処理するには、インストール/削除されるアプリケーション(または外部ストレージのマウント/マウント解除など)に関するPackageManagerブロードキャストを監視し、その時点でリストを更新する必要があります。ここで

は探しに放送されている:

http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_ADDED

http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_CHANGED

http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_REMOVED

http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_REPLACED

アプリケーションへの更新プログラムがインストールされている場合、あなたはシリーズを取得しますの放送のため、生産コードはリストを更新するときに少しスマートにしてください。

リストが変更されている可能性があることがわかったので、同じコードを実行してパッケージマネージャを再クエリーし、この新しいリストをアダプタに配置する必要があります。変更の際にリストビューに指示する場合は、必ずBaseAdapter.notifyDataSetChanged()に電話してください。

ここには、インストールされているアプリのリストを表示するアプリケーション管理UIを実装するための設定アプリ内のコードがあります。多くのことをしているので、これは明らかに複雑です - UIのグリッチを避けるために、すべての作業がメインスレッドから外れていることを確認し、ユーザーがUIとやりとりしている間にさまざまなアプリケーションデータのバックグラウンドでクエリを実行しますそれは、サードパーティのアプリケーションでは使用できないアプリケーションのストレージサイズを計算するために、システム内のいくつかのプライベートAPIを使用しますが、そのコードはすべて通常のSDKコードです。

https://android.googlesource.com/platform/packages/apps/Settings/+/gingerbread-release/src/com/android/settings/applications/ApplicationsState.java

関連する問題