我有一个有点奇怪/讨厌的问题,我在其中通过从Firestore查询必要的字符串元素来填充微调框下拉元素。查询部分不是问题。这是人口稠密的部分。微调器(实际上是MaterialBetterSpinner)位于一个片段中。我必须等一两秒钟才能打开微调器。如果我不这样做,那么微调器将无法工作。我尝试将查询移至该片段的onCreate,然后移至该片段的onStart覆盖处,但无济于事。在不破坏UX的情况下,我可能有哪些选择,也许可以使用处理程序禁用微调器几秒钟?
以下是方法:
@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);
}
答案 0 :(得分:1)
您正在异步调用以获取“ Restaurant_Data”。因此,仅在获取数据后填充微调器。
您可以尝试通过禁用微调器来克服此问题(如您建议的那样),直到成功检索到数据为止。另一个解决方法是预取数据(如果您确定将要打开此活动)。例如,您可以在上一个活动中预取数据并将其存储在静态变量中。