通过查询填充微调器

时间:2019-07-19 20:49:24

标签: android android-fragments android-spinner

我有一个有点奇怪/讨厌的问题,我在其中通过从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);
    }

1 个答案:

答案 0 :(得分:1)

您正在异步调用以获取“ Restaurant_Data”。因此,仅在获取数据后填充微调器。

您可以尝试通过禁用微调器来克服此问题(如您建议的那样),直到成功检索到数据为止。另一个解决方法是预取数据(如果您确定将要打开此活动)。例如,您可以在上一个活动中预取数据并将其存储在静态变量中。