地图中的列表不会出现在我的 ListView 中

List from map wont appear in my ListView

我根据从 firestore 数据库检索到的地图制作了一个值列表。问题是它不会出现在我的 listView 上。我从另一张地图启动了另一个列表,它出现在我的 listView 中。为什么从 firestore 文档中检索到的地图中的列表不起作用,而其他列表工作正常?

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());
                    }
                }
            });

    }
}

在您的 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();