2011-06-28 214 views
0

我有一個用戶安裝的應用程序的列表。當我點擊一個刪除它說它被刪除,但當我回到列表視圖時,該圖標仍顯示在列表視圖中,當我嘗試點擊它時,它表示應用程序已被卸載。如何在刪除它後從列表視圖中刪除它?Android刪除應用程序後從列表中刪除它

我想更新我的列表視圖,但是不知道該如何

下面是一些代碼

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

queryIntentActivities()返回活動的靜態列表;此列表在您的過程中,其內容不會改變,因爲您檢索列表後安裝的應用程序已更改。

要處理這組活動的變化,您需要監視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()以告知列表視圖。

以下是Settings應用程序中用於實現管理應用程序UI的代碼,該UI顯示已安裝應用程序的列表。這當然很複雜,因爲它做了很多事情 - 確保它所做的所有工作都離開主線程(以避免UI故障),在用戶與UI交互時在後臺對各種應用程序數據執行查詢等等。它利用系統中的一些私有API來計算應用程序存儲大小,而這些大小在第三方應用程序中無法使用,但其代碼全部只是普通的SDK代碼。

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

相關問題