Android Google Places API - PlaceAutocompleteFragment 清除按钮监听器

Posted

技术标签:

【中文标题】Android Google Places API - PlaceAutocompleteFragment 清除按钮监听器【英文标题】:Android Google Places API - PlaceAutocompleteFragment clear button listener 【发布时间】:2016-07-07 22:09:16 【问题描述】:

我在我的项目中使用Google Places API for android - PlaceAutocompleteFragment API 来搜索位置,当用户选择一个位置时,然后使用位置 lat-long 获取记录并将其显示到 ListView。 现在的问题是,每当用户点击PlaceAutocompleteFragment 的clear button (X) 时,我想要清除ListView 项目,我需要听清除按钮onClick?怎么做? 任何帮助将不胜感激。

autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() 
    @Override
    public void onPlaceSelected(Place place) 
        LatLng latLng=place.getLatLng();
        //hit web service, response parsing and add it to listview.
    

    @Override
    public void onError(Status status) 
        Log.i(TAG, "An error occurred: " + status);
    
);

【问题讨论】:

尝试从您设置为适配器的数组列表中删除该项目,然后调用 notifyDataSetChanged()。更多请贴代码 @JagjitSingh 我知道如何清除列表视图项目。在此之前,我需要听 PlaceAutocompleteFragment 的关闭按钮单击...我没有找到任何方法用于此 api。 发布整个代码。 你没有 placeautocomplete 的对象。你只要发出一个意图,就是这样。控件进入该片段。所以你不能有任何听众。请记住,您对此有一个 onactivityresult。在我看来,没有办法做到这一点。 @JagjitSingh 添加了更多代码。我认为不需要 HttpRequest,响应解析代码,因为它工作正常。唯一主要的是为 PlaceAutocompleteFragment 的清除/关闭按钮设置 onclick 侦听器。 【参考方案1】:

查看PlaceAutocompleteFragment 的源代码,我找到了那些视图ID,并像这样设置了onClickListener

autocompleteFragment.getView().findViewById(R.id.place_autocomplete_clear_button)
    .setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View view) 
            // example : way to access view from PlaceAutoCompleteFragment
            // ((EditText) autocompleteFragment.getView()
            // .findViewById(R.id.place_autocomplete_search_input)).setText(""); 
            autocompleteFragment.setText("");
            view.setVisibility(View.GONE);
        
);

【讨论】:

嗨,如果我们使用 IntentBuilder 调用它,我们可以访问 PlaceAutocompleteFragment 中使用的 searchview 的编辑文本吗 @NancyY 使用这个id 你可以得到searchview edittext R.id.place_autocomplete_search_input 确实有,看文档developers.google.com/android/reference/com/google/android/gms/… 伟大的侦探工作和答案。希望我能多次投票。 更改 places_autocomplete_clear_button 而不是 place_autocomplete_clear_button。对我来说,“s”是问题【参考方案2】:

上面的答案并没有解决我的问题。 我可以用一个技巧来解决它:)

    autocompleteFragment.getView().findViewById(R.id.place_autocomplete_clear_button).setPadding(0,0,0,55555);

【讨论】:

【参考方案3】:

我在活动的onCreate 中创建了findViewById,但出现以下错误

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference

因为片段尚未初始化/可见。我将监听器移到 setOnPlaceSelectedListener 中,现在它工作正常。

autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() 
    @Override
    public void onPlaceSelected(Place place) 
        homeAddressPlaceID = place.getId();
        Log.i(TAG, "Place: " + place.getName() + ", " + place);

        autocompleteFragment.getView().findViewById(R.id.places_autocomplete_clear_button)
                .setOnClickListener(new View.OnClickListener() 
                    @Override
                    public void onClick(View view) 
                        autocompleteFragment.setText("");
                        homeAddressPlaceID = "";
                    
                );
    

    @Override
    public void onError(Status status) 
        Log.i(TAG, "An error occurred: " + status);
    
);

【讨论】:

以上是关于Android Google Places API - PlaceAutocompleteFragment 清除按钮监听器的主要内容,如果未能解决你的问题,请参考以下文章

适用于 Android 的 Google Places API 未显示

获取适用于 Android 的 Google Places API 密钥

适用于 Android 的 Google Places API:地图立即消失

Google Places API Android:自动完成关闭太快

Android Google Places API - PlaceAutocompleteFragment 清除按钮监听器

如何为我的 Android 应用获取 Google Places API 密钥