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 清除按钮监听器