自动完成文本视图与改造

时间:2018-06-26 14:41:54

标签: android

我正在使用AutoCompleteTextView的实现,其中从webapi提取建议并根据用户输入显示建议。我正在使用改造客户端进行网络连接。我有两个疑问。 1)我不想为每个键入的字符发送请求。仅当用户按住5秒钟时,它才应发送请求。如何在AutoCompleteTextView实现中实现。 2)我正在使用可观察的响应,如果两个请求一个接一个地从客户端发送,那么可观察的如何处理响应,以便仅在客户端处理最后一个响应。 我现在无法发布我的代码,但是如果出现问题,我会发布它。

2 个答案:

答案 0 :(得分:0)

要等待发送请求,可以使用TextWatcher的onTextChanged方法。

每次更改文本时,都可以使用系统方法System.currentTimeMillis更新变量,例如timePressed。更新后,您可以检查当前系统时间是否比上次更改文本以来超过一定时间(例如5000ms)。如果是这样,请调用发送您的API请求的方法。

请参阅以下资源以获取更多指导:

TextWatcher onTextChanged

currentTimeMillis

Similar Question here on SO

答案 1 :(得分:0)

这应该有效

// Setup The Category Autocomplete

    private void setupCategoryAutocomplete() {

        Call<JsonObject> call = RetrofitClientLaravel.getInstance()
                                                     .videosGetApi()
                                                     .getCategories();

        call.enqueue(new Callback<JsonObject>() {

            @Override
            public void onResponse(Call<JsonObject> call,
                                   Response<JsonObject> response) {

                JSONObject jsonObject;
                try {
                    jsonObject = new JSONObject(new Gson().toJson(response.body()));

                    // Check If User Array Has Anything
                    JSONArray returnArray = jsonObject.getJSONArray("video_categories");
                    List<String> str = new ArrayList<String>();

                    if (!returnArray.isNull(0)) {

                        for (int l = 0; l < returnArray.length(); l++) {
                            if (returnArray.length() > 0) {

                                // Get The Json Object
                                JSONObject returnJSONObject = returnArray.getJSONObject(l);

                                // Get Details
                                String category = returnJSONObject.optString("category");
                                str.add(category);
                            }
                        }
                    }

                    ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(getContext(),
                                                                             android.R.layout.simple_list_item_1,
                                                                             str.toArray(new String[]{}));
                    atvCategory.setAdapter(adapter1);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<JsonObject> call,
                                  Throwable t) {

            }
        });