Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/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
Java 从ListView中删除重复的应用程序名称(字符串)_Java_Android_Listview - Fatal编程技术网

Java 从ListView中删除重复的应用程序名称(字符串)

Java 从ListView中删除重复的应用程序名称(字符串),java,android,listview,Java,Android,Listview,我想获得非重复应用程序名称的列表,我如何知道我的列表视图已经具有相同的名称。我尝试了以下代码,但我只得到了重复的应用程序名称,因为一个应用程序有多个进程在运行,在这种情况下,我只想显示一个应用程序名称。 我该怎么做 @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (null == convertView)

我想获得非重复应用程序名称的列表,我如何知道我的列表视图已经具有相同的名称。我尝试了以下代码,但我只得到了重复的应用程序名称,因为一个应用程序有多个进程在运行,在这种情况下,我只想显示一个应用程序名称。 我该怎么做

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    final ViewHolder holder;
    if (null == convertView)
    {
        LayoutInflater layoutInflater = (LayoutInflater) m_oContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = layoutInflater.inflate(R.layout.list_item, null);
        holder = new ViewHolder(convertView);
    } else
    {
        holder = (ViewHolder) convertView.getTag();
    }
    AndroidAppProcess androidAppProcess = m_processesList.get(position);
    //getItem(position);
    TextView processName = (TextView) convertView.findViewById(R.id.name);
    ImageView appIcon = (ImageView) convertView.findViewById(R.id.icon);
    if (androidAppProcess != null)
    {
        try
        {

            String proName= (String) m_oContext.getPackageManager().getApplicationLabel(m_oContext.getPackageManager().getApplicationInfo(androidAppProcess.getPackageName(), m_oContext.getPackageManager().GET_META_DATA));
//           if( processName !=null && !m_processesList.contains(proName))
            if( processName !=null && !proName.equalsIgnoreCase((String)processName.getText()))

            {
                if(!proName.equals("Battery Optimizer"))
                {
                    processName.setText(proName);
                    appIcon.setImageDrawable(m_oContext.getPackageManager().getApplicationIcon(androidAppProcess.getPackageName()));
                }
            }
            //TODO: maintain icon size to avoid OOM error
        } catch (PackageManager.NameNotFoundException e)
       {
           processName.setText(androidAppProcess.getPackageName());
           Drawable res = m_oContext.getResources().getDrawable(R.mipmap.ic_launcher, m_oContext.getTheme());
           appIcon.setImageDrawable(res);
       }

    }

要检索设备内的所有软件包名称而不复制,只需应用以下命令 1.添加一个HashMap变量来存储信息

private List<PackageInfo> info = new ArrayList<PackageInfo>();

你能把屏幕截图放进去吗?简单的应用HashSet可以解决你的问题problem@S.W.HashSet可以解决这个问题,但我必须在适配器的getView()中使用它……您能详细说明如何使用它吗?使
m_processesList
成为HashSet而不是ArrayList@cricket_007是的…让我试试这个私人的{//TODO:此处将正在运行的应用程序列表设置为适配器m_ProcessList=AndroidProcesss.GetRunningAppProcesss();set set=new HashSet();set.addAll(m_ProcessList);m_ProcessList.clear();m_ProcessList.addAll(set);runningAppsAdapter=new AppsAdapter(RunningAppsActivity.this,R.layout.list_项,m_processesList);m_listView.setAdapter(runningAppsAdapter);runningAppsAdapter.notifyDataSetChanged();}
List<PackageInfo> packages = context.getPackageManager()
            .getInstalledPackages(0);
info = new ArrayList<PackageInfo>();
HashMap<String, PackageInfo> infoList = new HashMap<String, PackageInfo>();
for (PackageInfo s : packages)
    if (!infoList.containsKey(s.packageName)){
        infoList.put(s.packageName, s);
        info.add(s);
    }
processName.setText(info.get(position).packageName);