Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除应用程序后,Android将其从listview中删除_Android - Fatal编程技术网

删除应用程序后,Android将其从listview中删除

删除应用程序后,Android将其从listview中删除,android,Android,我有一个用户安装的应用程序列表。当我点击一个来删除它时,它表示它已被删除,但当我返回到listview时,图标仍显示在listview中,当我尝试点击它时,它表示该应用程序已被卸载。删除后,如何将其从listview中删除 我想更新我的listview,但不确定如何更新 这里有一些代码 public void update() { // TODO mAppListAdapter.clear(); Intent aIntent = new Intent(Intent.AC

我有一个用户安装的应用程序列表。当我点击一个来删除它时,它表示它已被删除,但当我返回到listview时,图标仍显示在listview中,当我尝试点击它时,它表示该应用程序已被卸载。删除后,如何将其从listview中删除

我想更新我的listview,但不确定如何更新

这里有一些代码

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



    }
    }
public void update(){
//待办事项
mapplistatadapter.clear();
意图维护=新意图(Intent.ACTION\u MAIN,空);
ainent.addCategory(Intent.CATEGORY_启动器);
PackageManager aPackageManager=getPackageManager();
List aList=aPackageManager.querytentActivities(ainent,PackageManager.GET_UNINSTALLED_PACKAGES);
for(ResolveInfo:aList){
如果(!isSystemPackage(rInfo))
添加(rInfo.activityInfo.applicationInfo);

//for(int n=0;n
queryIntentActivities()
返回活动的静态列表;此列表在您的过程中,其内容不会在背后更改,因为自您检索列表后,已安装的应用程序已更改

要处理不断变化的活动集,您需要关注PackageManager关于正在安装/删除的应用程序(或正在安装/卸载的外部存储等)的广播,并在此时更新您的列表

以下是要查找的广播:

安装应用程序更新后,您将收到一系列广播,因此生产代码在更新列表时应该有点精明

现在您知道列表可能已更改,您需要运行相同的代码重新查询包管理器,并将此新列表放入适配器中。请确保在执行此操作时调用
BaseAdapter.notifyDataSetChanged()
,以告知列表视图有关更改的信息

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