2016-12-29 8 views
2

Google Places APIのplaceautocompleteフラグメントを使用して検索ビューに完全なアドレスを表示する方法はありますか?アドレス全体の最初の部分だけが表示されます。すべてが正しく実装され、完全なアドレスがplace.getAddress()によって返されると確信しています。フルアドレスが検索バーに表示されない理由は何ですか?placeautocompletefragment完全なアドレス

autocompleteFragment = (PlaceAutocompleteFragment) 
      getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment); 
    ((EditText)autocompleteFragment.getActivity().findViewById(R.id.place_autocomplete_search_input)).setTextSize(18.0f); 
    autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() { 
     @Override 
     public void onPlaceSelected(Place place) { 
      // TODO: Get info about the selected place. 
      ((EditText)autocompleteFragment.getView().findViewById(R.id.place_autocomplete_prediction_primary_text)) 
      //autocompleteFragment.getActivity().findViewById(R.id.place_autocomplete_search_input)) 
        .setText(place.getAddress()); 
      Log.i(TAG, "Place Selected: " + place.getName() + place.getAddress()); 
     } 

     @Override 
     public void onError(Status status) { 
      // TODO: Handle the error. 
      Log.i(TAG, "An error occurred: " + status); 
     } 
    }); 
    AutocompleteFilter typeFilter = new AutocompleteFilter.Builder() 
      .setTypeFilter(AutocompleteFilter.TYPE_FILTER_ADDRESS) 
      .build(); 
    autocompleteFragment.setFilter(typeFilter); 

EDIT: 私のアプリは、まさにこのリンク内の1つのように機能しています。 https://maps-apis.googleblog.com/2015/12/autocomplete-widget-and-updated-place.html

私がしたいのは、黒いテキスト(場所の名前)の代わりに検索バーにテキストをグレー(完全なアドレス)で表示することです。誰もが解決策を知っていますか?前もって感謝します!

+1

ここにコードを投稿してください –

答えて

3

、あなたのXMLで

public class CustomPlaceAutoCompleteFragment extends PlaceAutocompleteFragment { 
    Place place; 

    @Override 
    public View onCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle bundle) { 
    this.setOnPlaceSelectedListener(new PlaceSelectionListener() { 
     @Override public void onPlaceSelected(Place place) { 
     CustomPlaceAutoCompleteFragment.this.place = place; 
     } 

     @Override public void onError(Status status) { 

     } 
    }); 
    return super.onCreateView(layoutInflater, viewGroup, bundle); 
    } 

    @Override public void onActivityResult(int i, int i1, Intent intent) { 
    super.onActivityResult(i, i1, intent); 
    ((AppCompatEditText) getView() 
     .findViewById(R.id.place_autocomplete_search_input)).setText(place.getAddress()); 
    } 
} 

以下のコードで

<fragment 
     android:id="@+id/place_autocomplete_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:name="com.yourpackagenaem.CustomPlaceAutoCompleteFragment" 
     /> 
CustomPlaceAutoCompleteFragmentを作成します。

onPlaceSelectedで完全なアドレスを設定できないのは、PlaceAutoCompleteFragmentがデフォルトでonActivityResultにテキストの名前を設定しているためです。したがって、それを無効にする必要があります。そのため、CustomPlaceAutoCompleteFragmentを作成することをお勧めします。私はコードをテストしました。それは魅力のように働いた。

希望します。ハッピーコーディング:)

+0

ありがとうございます。魔法のように働いた –

0

使用AutocompleteFilterこのような結果では完全なアドレスを取得する:

AutocompleteFilter typeFilter = new AutocompleteFilter.Builder() 
       .setTypeFilter(AutocompleteFilter.TYPE_FILTER_ADDRESS) 
       .build(); 

Intent intent = new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_OVERLAY).setFilter(typeFilter).build(activity); 
     startActivityForResult(intent, 1); 

のSrc:https://developers.google.com/android/reference/com/google/android/gms/location/places/AutocompleteFilter

+0

私は何をしたのでしょうか? –

0

Mainクラスに置くだけでカスタムクラスを作成する必要はありません。

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     try{ 
      ((EditText)autocompleteFragment.getView().findViewById(R.id.place_autocomplete_search_input)).setText(mPlace.getAddress()); 

     }catch (Exception e){ 
       e.printStackTrace(); 
     } 

    } 
0

PlaceAutocompleteFragment自体でsetText()を呼び出してください。

PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment)getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment); 

autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() { 
    @Override 
    public void onPlaceSelected(Place place) { 
     // TODO: Get info about the selected place. 
     autocompleteFragment.setText(place.getAddress()); 
    } 

    @Override 
    public void onError(Status status) { 
     // TODO: Handle the error. 
     Log.i(TAG, "An error occurred: " + status); 
    } 
} 
+0

これは動作していないようです。 onSlaceSelectedが呼び出された後にPlaceSelectionListenerがautocompleteFragmentのテキストを設定する必要があります。 – thailey01

関連する問題