2011-06-28 79 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