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

时间:2016-03-21 11:56:08

标签: android android-fragments google-maps-android-api-2 android-location google-places

我在项目中使用Google Places API for Android - PlaceAutocompleteFragment API搜索位置,当用户选择位置然后使用lat-long位置获取记录并将其显示到ListView。

现在问题是每当用户点击PlaceAutocompleteFragment清除按钮(X)时,我想要清除ListView项目,我需要听清楚按钮onClick?怎么做?

enter image description here
任何帮助将不胜感激。

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);
    }
});

3 个答案:

答案 0 :(得分:20)

查看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);
        }
});

答案 1 :(得分:0)

以上答案无法解决我的问题。 我可以用把戏解决它:)

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

答案 2 :(得分:0)

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

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);
    }
});