Список из карты не появится в моем ListView - PullRequest
0 голосов
/ 05 июля 2018

Я составил список значений из карты, извлеченной из базы данных пожарного магазина. Проблема в том, что он не появится на моем listView. Я инициировал другой список с другой карты, и он появился в моем listView. Почему список с карты, извлеченной из документа пожарного депо, не будет работать, в то время как другой список работает нормально?

public class RecipeActivity extends Activity {

private ListView listView;
private ArrayAdapter<Object> arrayAdapter;
private FirebaseFirestore newRecipeDb;
private Map<String, Object> meMap = new HashMap<String, Object>();
private List<Object> list = new ArrayList<>();
private List<String> listStrings = new ArrayList<> ();
private TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_recipe);

    textView = findViewById(R.id. breadRecipe);
    listView = findViewById(R.id.listIngredient);
    arrayAdapter = new ArrayAdapter<Object>(this,
            android.R.layout.simple_list_item_activated_1, list);

    newRecipeDb = FirebaseFirestore.getInstance();
    newRecipeDb.collection("users")
            .document("bakeryMgt")
            .collection("New Recipe")
            .document("cherri pie")
            .get()
            .addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                    if (task.isSuccessful()) {
                        DocumentSnapshot document = task.getResult();
                        if (document.exists()) {
                            System.out.println("DocumentSnapshot data " + document.getData());
                            meMap = document.getData();
                            list = new ArrayList<Object>(meMap.values());
                            listView.setAdapter(arrayAdapter);

                        } else {
                            System.out.println("No such document");
                        }
                    } else {
                        System.out.println("get failed with " + task.getException());
                    }
                }
            });

    }
}

1 Ответ

0 голосов
/ 05 июля 2018

В вашем onCreate вы создаете ArrayAdapter на основе list:

arrayAdapter = new ArrayAdapter<Object>(this,
        android.R.layout.simple_list_item_activated_1, list);

Затем внутри onComplete вы создаете новый список:

 list = new ArrayList<Object>(meMap.values());

Это означает, что arrayAdapter не указывает на list, в который вы помещаете данные.

Решение заключается в добавлении данных из документа в существующий list:

list.add(meMap.values());

Я бы также рекомендовал привязывать адаптер к списку при инициализации обоих:

listView = findViewById(R.id.listIngredient);
arrayAdapter = new ArrayAdapter<Object>(this,
        android.R.layout.simple_list_item_activated_1, list);
listView.setAdapter(arrayAdapter);

И тогда только уведомите адаптер, что его данные изменились, как только вы добавите элемент в list:

list.add(meMap.values());
arrayAdapter.notifyDataSetChanged();
...