【问题标题】:Cancel Task in Place AutoComplete for Android取消任务就地自动完成(适用于 Android)
【发布时间】:2018-01-25 06:09:52
【问题描述】:

我在下面为 Android 库使用 Places 自动完成功能是我的代码:

private void callGoogleAutoComplete(String newText) {
    AutocompleteFilter typeFilter = new AutocompleteFilter.Builder()
            .setCountry("PK")
            .build();
    Task<AutocompletePredictionBufferResponse> results=mGeoDataClient.getAutocompletePredictions(newText,myBounds,typeFilter);

    results.addOnCompleteListener(new OnCompleteListener<AutocompletePredictionBufferResponse>() {
        @Override
        public void onComplete(@NonNull Task<AutocompletePredictionBufferResponse> task) {
            try {
                String response="";
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    results.addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {

        }
    });
    results.addOnSuccessListener(new OnSuccessListener<AutocompletePredictionBufferResponse>() {
        @Override
        public void onSuccess(AutocompletePredictionBufferResponse autocompletePredictions) {
        }
    });
}

每次 EditText 中的文本更改时都会调用上述方法,我想取消之前的调用(任务),因为正在生成每个字符任务。但我无法取消任务。

注意

我只为监听器发布了必要的代码。

【问题讨论】:

    标签: android google-maps google-places-api


    【解决方案1】:

    我认为这是延迟用户输入的更好方法。等待用户完成输入然后调用你的方法它可以帮助你。像这样

    editText.addTextChangedListener(
    new TextWatcher() {
        @Override public void onTextChanged(CharSequence s, int start, int before, int count) { }
        @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
    
        private Timer timer=new Timer();
        private final long DELAY = 1000; // milliseconds
    
        @Override
        public void afterTextChanged(final Editable s) {
            timer.cancel();
            timer = new Timer();
            timer.schedule(
                new TimerTask() {
                    @Override
                    public void run() {
                        // TODO: do what you need here (refresh list)
                        // you will probably need to use runOnUiThread(Runnable action) for some specific actions
                    }
                }, 
                DELAY
            );
        }
    }
    );
    

    【讨论】:

    • PlaceAutoComplete 始终作为用户类型工作。在 Play 商店中检查搜索
    猜你喜欢
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2017-05-19
    • 2016-06-30
    相关资源
    最近更新 更多