Как можно отсортировать элементы Recyclerview, если приложение установлено на устройстве или нет - PullRequest
0 голосов
/ 25 марта 2020

У меня есть список приложений, к которым вы можете получить доступ через Google Play. для любого приложения у меня есть массив JSON, подобный этому;

{
  "packageName": "com.whatsapp",
  "name": "WhatsApp",
  "iconUrl": "https://lh3.googleusercontent.com/bYtqbOcTYOlgc6gqZ2rwb8lptHuwlNE75zYJu6Bn076-hTmvd96HH-6v7S0YUAAJXoJN\u003ds180",
  "price": "0",
  "ratingValue": 4.3,
  "ratingCount": 107579089,
  "downloads": "5,000,000,000+",
  "publishDate": {
    "year": 2020,
    "month": 3,
    "day": 18
  },
  "version": "2.20.89",
  "category": "COMMUNICATION",
  "developerName": "WhatsApp Inc.",
  "developerEmail": "android@support.whatsapp.com",
  "developerAddress": "1601 Willow Road Menlo Park, CA 94025"
}

Я могу отсортировать приложение по именам в recyclerview, оно относится к классу Utils и работает хорошо;

 public static void sortByName(List<AppModel> list) {
    Collections.sort(list, (o1, o2) -> o1.getName().compareTo(o2.getName()));
}

Более того, с помощью моего класса AppModel я могу получить packagaName для каждого приложения, я хочу отсортировать эти приложения, если оно установлено на устройстве или нет, а именно, если есть 20 приложений, и если я установил 3 из них, я хочу сначала показать эти 3 приложения в переработке.

Я пробовал этот метод, но он не работал;

 private static boolean isAppInstalled(Context context, String packageName) {
    try {
        context.getPackageManager().getApplicationInfo(packageName, 0);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}



public static void sortByDeviceInstallation(Context context, List<AppModel> list) {

    List<AppModel> installedApps = new ArrayList<>();
    List<AppModel> otherApps = new ArrayList<>();

    for (AppModel app : list) {
        if (isAppInstalled(context, app.getPackageName())) {
            installedApps.add(app);
        } else {
            otherApps.add(app);
        }
    }

    Collections.sort(installedApps, (o1, o2) -> o1.getName().compareTo(o2.getName()));

    Collections.sort(otherApps, (o1, o2) -> o1.getName().compareTo(o2.getName()));

    installedApps.addAll(otherApps);
}

и использовался в моем фрагменте;

SortData.sortByDeviceInstallation(getActivity(), list);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...