Добавьте два ArrayList на один спиннер - PullRequest
0 голосов
/ 27 июня 2019

См. Изображение
Я хочу сопоставить элементы favourite_city с опциями, и, если совпадение найдено, установить список favourite_city в качестве верхней позиции в опциях с собственным содержимым.

Первый ArrayList:

favourite_city = [ "Хайдарабад", "Бангалор"]

Второй ArrayList:

опция = [ "Нашик", "Хайдарабад", "Мумбаи", "Бангалор", "Ченнай", "Пуна"]

Результат:

опция = [ "Хайдарабад", "Бангалор", "Нашик", "Хайдарабад", "Мумбаи", "Бангалор", "Ченнай", "Пуна"]

    DocumentReference docRef5 = FirebaseFirestore.getInstance().collection("admin").document("users_profile").collection("dynamic_profile").document("city");
    docRef5.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                if (document != null) {

                    //-----------code for loading array item from firebase to spinner view-----------------
                    final List<String> group = (List<String>) document.get("favourite_city");
                    Log.d(TAG, "favourite city list data: " + group);

                    final List<String> group1 = (List<String>) document.get("options");
                    Log.d(TAG, "options list data: " + group1);

                    cityAdapter = new ArrayAdapter<String>(AdminSetting.this, android.R.layout.simple_spinner_item, group1);
                    cityAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    citySpinner.setAdapter(cityAdapter);


                    StringBuilder str = new StringBuilder();
                    for (int i = 0; i < group.size(); i++) {
                        if (i >= 0)
                            str = str.append(group.get(i));

                            String searchedItem = str.toString();

                            Log.d(TAG, "result " + searchedItem);

                        int itemPosition = cityAdapter.getPosition(searchedItem);

                        for(int j=0;j<=i;j++) {

                            if (itemPosition == -1) {
                                String message = searchedItem + " : Item not found.";
                                Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
                            } else {

                                String message = searchedItem + " : Item found and selected.";
                                Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
                                citySpinner.setSelection(itemPosition);
                            }
                        }

                        Log.d(TAG, "after appending " + str);
                    }
                } else {
                    Log.d(TAG, "No such document");
                }
            } else {
                Log.d(TAG, "get failed with ", task.getException());
            }
        }
    });

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Чтобы поставить на первые позиции избранные города, вам необходимо знать, содержатся ли они в списке городов.

Проверьте этот код в качестве примера:

ArrayList<String> favourites = new ArrayList<>(Arrays.asList("city1", "city2"));
ArrayList<String> cities = new ArrayList<>(Arrays.asList("city3", "city4", "city1", "city2"));

for (String favCity : favourites) {
   if (cities.contains(favCity)) {
       cities.add(favourites.indexOf(favCity), favCity);
   }
}

System.out.println(cities);

Будет напечатано следующее:

[city1, city2, city3, city4, city1, city2]

Если вы хотите удалить дублированные избранные города, чтобы оставить только ихна первых позициях вы должны добавить эту строку перед добавлением в список.

cities.remove(favCity);

И она вернет:

[city1, city2, city3, city4]

0 голосов
/ 27 июня 2019

Прежде всего, ваш вопрос не ясен

Если вы хотите объединить два массива, вам нужно использовать следующий код:

favourite_city.addAll(options) // or Either way

Если вы хотите найти совпадения, некоторые из них вам нужно сделатькак ниже

public String getUserId(ArrayList<User> newUsers, ArrayList<User> oldUsers, String email) {

    String userId = null;

    for (User user1 : newUsers) {
        if (user1.email.equals(email)) {
            userId = user1.uid;
            break;
        } 
    }

    if(userId == null){
        for (User user2 : oldUsers) {
            if (user2.email.equals(email)) {
                userId = user2.uid;
                break;
            }
        }
    }

    return userId;
}
...