2017-07-11 25 views
0

"A"と "B"の2つのアクティビティを含むアプリがあります。アクティビティ "A"には、アクティビティ "A"のリストビューとアクティビティ "B"にアクティビティ "B"のlistviewを取り込むarraylistも含まれています。私が得たいのは、アクティビティ "B"のarraylistからの "packagename"値であり、アクティビティ "A"のarraylistからの "packagename"値と比較されます。私が欲しいのは、もし両方の "packagename"の値が同じであれば、continueキーワードを使ってジャンプしたいのです。アンドロイドで2人のarraylistsの価値を比較するには?

private List<AppList> getInstalledApps() { 
    List<AppList> res = new ArrayList<AppList>(); 
    List<PackageInfo> packs = getPackageManager().getInstalledPackages(0); 
    for (int i = 0; i < packs.size(); i++) { 
     PackageInfo p = packs.get(i); 
     if ((!isSystemPackage(p))) { 
      boolean isWhiteList = false; 
      if (whiteListModels!=null) { 
       for (int j = 0; j< whiteListModels.size(); j++) { 
        model = whiteListModels.get(j); 
        Log.e(TAG,"p*****"+model.getPackName()); 
        if (p.applicationInfo.loadLabel(getPackageManager()).toString().equalsIgnoreCase(model.getPackName())) { 
         // This package is whitlist package 
         isWhiteList = true; 
        } 

       } 
      } 
      // We don't need to add white list app in the list 
      if (isWhiteList) { 
       continue; 
      } 

      String appName = p.applicationInfo.loadLabel(getPackageManager()).toString(); 
      Drawable icon = p.applicationInfo.loadIcon(getPackageManager()); 
      String packageName = p.applicationInfo.packageName; 

      Log.e(TAG, "package name::" + packageName); 
      Log.e(TAG, "icon name::" + icon); 
      res.add(new AppList(appName, icon, packageName)); 
     } 
    } 
    return res; 
} 
+0

適切な英語を使用してください。質問は私にはあまり意味がありません。 –

答えて

1

あなたは

private List<AppList> getInstalledApps() { 
     List<AppList> res = new ArrayList<AppList>(); 
     List<PackageInfo> packs = getPackageManager().getInstalledPackages(0); 
     for (int i = 0; i < packs.size(); i++) { 
      PackageInfo p = packs.get(i); 
      if ((!isSystemPackage(p))) { 
       boolean isWhiteList = false; 

       if (whiteListModels != null) { 
        for (int j = 0; j < whiteListModels.size(); j++) { 
         WhiteListModel model = whiteListModels.get(j); 
//      s = model.getPackName(); 
//      Log.e(TAG, "PackageName::" + s); 

         if (p.applicationInfo.packageName.equalsIgnoreCase(model.getPackName())) { 
          // This package is whitlist package 
          isWhiteList = true; 

          break; 
         } 
        } 
       } 

       // We don't need to add white list app in the list 
       if (isWhiteList) { 
        continue; 
       } 
       // We should compare with package name not label to ignore the white list app 
//    if (p.applicationInfo.loadLabel(getPackageManager()).toString().equalsIgnoreCase(s)) { 
//     continue; 
//    } 

       String appName = p.applicationInfo.loadLabel(getPackageManager()).toString(); 
       Drawable icon = p.applicationInfo.loadIcon(getPackageManager()); 
       String packageName = p.applicationInfo.packageName; 

       Log.e(TAG, "package name::" + packageName); 
       Log.e(TAG, "icon name::" + icon); 
       res.add(new AppList(appName, icon, packageName)); 
      } 
     } 
     return res; 
    } 
+0

同じパッケージの値がまだリスト1に存在しています – Niraj

+0

問題の最新コードを更新できますか? –

+0

model.getPackName()はパッケージ名またはアプリ名です。 –

0

内部ループを使用して、arrayList2のPersonのIDがarrayList1の任意のPerson IDに対応するかどうかを確認できます。人物が見つかった場合は、フラグを立ててマークする必要があります。

ArrayList<Integer> results = new ArrayList<>(); 

// Loop arrayList2 items 
for (Person person2 : arrayList2) { 
    // Loop arrayList1 items 
    boolean found = false; 
    for (Person person1 : arrayList1) { 
     if (person2.id == person1.id) { 
      found = true; 
     } 
    } 
    if (!found) { 
     results.add(person2.id); 
    } 
} 

+0

私は追加したくない...単純なチェックarraylist1から仮定しようとする場合私は値 "a"を持っていると同じ値を持っている場合arraylist2と比較してループからジャンプしたい – Niraj

+0

私のコードを見て変更... plss – Niraj

1

ArrayListクラスの.containsメソッドを使用して、オブジェクトが他のオブジェクトに存在するかどうかを調べることを検討してください。

ArrayList<MyClass>List_1=new ArrayList<>(); 
ArrayList<MyClass>List_2=new ArrayList<>(); 

Iterator<MyClass> iterator=List_1.iterator(); 

while(iterator.hasNext()){ 
    MyClass obj=iterator.next(); 
    if(List_2.contains(obj)){ 
     //found 
    } 
} 
0

あなたの問題を解決するためにPredicateを使用する必要があり、このようにしてみてください。 は私がそれのためにあなたに例を挙げてみましょう:

  1. あなたのパッケージがリストされている白かではありませんチェックするブール値を返すメソッドを作成します。

    public boolean isWhitelistedPackage(String mPackageName) { 
        if (getPacakageNames() == null) { // This should be your Activity B's list items 
         return null; 
        } 
        // Create collection 
        Collection<Model> whiteListModels = 
        Collections2.filter(getPacakageNames(), isPackageSafe(mPackageName)); 
        List<Model> modelList = new ArrayList<>(); 
        imageItemList.addAll(whiteListModels); 
        Model model = modelList.get(0); // As we are comparing single item, this would be always 0th position to check. 
        boolean value = mPackageName.equalsIgnoreCase(model.getPackName()) 
        return value; 
    } 
    
  2. 上記のメソッドで使用される述語isPackageSafeを作成します。

    private Predicate<Model> isPackageSafe(String mPackageName) { 
        return new Predicate<Model>() { 
         @Override 
         public boolean apply(Model modelItem) { 
          return modelItem.getPackName().equalsIgnoreCase(mPackageName); 
         } 
        }; 
    } 
    

感謝。

関連する問題