地图中的列表不会出现在我的 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();
我根据从 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();