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

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

现在的问题是,每当用户点击PlaceAutocompleteFragmentclear 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 侦听器。

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


【解决方案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
  • 伟大的侦探工作和答案。希望我能多次投票。
  • 更改 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);
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-11
      • 1970-01-01
      • 2012-07-25
      相关资源
      最近更新 更多