通过查询填充微调器
Populating a spinner via a query
我在通过从 Firestore 查询必要的字符串元素来填充微调器下拉元素时遇到了一个 strange/annoying 问题。查询部分不是问题。它是填充部分。微调器(实际上是 MaterialBetterSpinner)在片段中。而且我必须等待一两秒钟才能打开微调器。如果我不这样做,那么微调器将无法工作。我尝试将查询移动到 onCreate,然后移动到片段的 onStart 覆盖,但无济于事。在不破坏用户体验的情况下,我有什么选择可以使用处理程序禁用微调器几秒钟?
方法如下:
@Override
public void onStart() {
super.onStart();
FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
Query myRestaurants = firebaseFirestore.collection("Restaurant_Data").whereArrayContains("users", getUser());
myRestaurants.get().addOnSuccessListener(queryDocumentSnapshots -> {
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
Restaurant restaurant = documentSnapshot.toObject(Restaurant.class);
spinnerList.add(restaurant.getRestaurantAddress());
restaurantArrayList.add(restaurant);
}
}).addOnFailureListener(e -> {
Log.d(TAG, "Exception for spinner: " + e.getMessage());
});
}
并且此方法是从片段中的 onCreateView 调用的:
private void getRestaurants() {
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(restaurantContext, android.R.layout.simple_dropdown_item_1line, spinnerList);
materialDesignSpinner = restaurantView.findViewById(R.id.restaurant_spinner);
materialDesignSpinner.setAdapter(arrayAdapter);
}
您正在进行异步调用以获取 "Restaurant_Data"。因此,只有在获取数据后才会填充微调器。
您可以尝试通过禁用微调器来解决这个问题(如您所建议的),直到成功检索数据。另一种解决方法是预取数据(如果您确定此 activity 将被打开)。例如,您可以预取前面activity中的数据并将其存储在静态变量中。
我在通过从 Firestore 查询必要的字符串元素来填充微调器下拉元素时遇到了一个 strange/annoying 问题。查询部分不是问题。它是填充部分。微调器(实际上是 MaterialBetterSpinner)在片段中。而且我必须等待一两秒钟才能打开微调器。如果我不这样做,那么微调器将无法工作。我尝试将查询移动到 onCreate,然后移动到片段的 onStart 覆盖,但无济于事。在不破坏用户体验的情况下,我有什么选择可以使用处理程序禁用微调器几秒钟?
方法如下:
@Override
public void onStart() {
super.onStart();
FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
Query myRestaurants = firebaseFirestore.collection("Restaurant_Data").whereArrayContains("users", getUser());
myRestaurants.get().addOnSuccessListener(queryDocumentSnapshots -> {
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
Restaurant restaurant = documentSnapshot.toObject(Restaurant.class);
spinnerList.add(restaurant.getRestaurantAddress());
restaurantArrayList.add(restaurant);
}
}).addOnFailureListener(e -> {
Log.d(TAG, "Exception for spinner: " + e.getMessage());
});
}
并且此方法是从片段中的 onCreateView 调用的:
private void getRestaurants() {
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(restaurantContext, android.R.layout.simple_dropdown_item_1line, spinnerList);
materialDesignSpinner = restaurantView.findViewById(R.id.restaurant_spinner);
materialDesignSpinner.setAdapter(arrayAdapter);
}
您正在进行异步调用以获取 "Restaurant_Data"。因此,只有在获取数据后才会填充微调器。
您可以尝试通过禁用微调器来解决这个问题(如您所建议的),直到成功检索数据。另一种解决方法是预取数据(如果您确定此 activity 将被打开)。例如,您可以预取前面activity中的数据并将其存储在静态变量中。