删除后,Android会从列表视图中删除应用

时间:2011-06-28 00:03:44

标签: 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 个答案:

答案 0 :(得分: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()告诉列表视图有关更改的信息。

以下是“设置”应用中的代码,用于实现管理应用程序用户界面,其中显示已安装的应用程序列表。这无疑是复杂的,因为它做了很多事情 - 确保它所做的所有工作都离开主线程(以避免UI故障),在用户与UI交互时在后台执行各种应用程序数据的查询它利用系统中的一些私有API来计算你在第三方应用程序中无法使用的应用程序存储大小,但它的代码只是常规的SDK代码。

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