如何控制(启用/禁用)Google Place自动填充片段编辑功能

时间:2017-02-21 20:48:59

标签: java android android-fragments autocomplete google-places-api

我正在Android平台上开发拼车应用程序(来自我的大学)。在我的Google地图中,我有2个地方自动填充片段(称为"来自"和" To")和乘车请求按钮。一旦应用知道用户的当前位置,它应该将一个地点自动完成片段设置到大学的位置并禁用对该片段的任何改变/编辑(即,如果用户的位置是在大学,它会将" From"自动完成片段设置到大学的位置。因此,禁用该片段的功能,因为我不想要用户选择从大学以外的某个地方接受。)

同样,如果他们的位置不在大学,这意味着他们需要乘车去大学。所以,第二个片段," To"片段应该固定在大学的位置。因此,应该禁用它以防止用户请求乘车到大学以外的某个地方。

我的问题是:如何禁用/启用地方自动填充片段?

我希望很清楚我想要完成的事情。我非常感谢任何帮助或想法如何处理这个问题。

从onConnected()和onLocationChanged()调用以下函数:

private void handleNewLocation(Location location) {
    Log.i(TAG, location.toString());

    //Place current location marker
    LatLng currentlatLng = new LatLng(location.getLatitude(), location.getLongitude());

    Location university = new Location("");
    university.setLatitude(-33.8688);
    university.setLongitude(151.2093);

    float distanceInMeters = location.distanceTo(university);
    /*
        NOTE: this is assuming the user is rider.
        Compute distance between current location and University,
        if distance is >= 1000m, then set destination ("To" fragment) to University.
        Otherwise (distance is < 1000m), set source location ("From" fragment) to University
     */
    if(distanceInMeters >= 1000.0) {
        toPlaceAutocomplete.setText("University");
    } else {
        fromPlaceAutocomplete.setText("University");
    }

    MarkerOptions markerOptions = new MarkerOptions();
    markerOptions.position(currentlatLng);
    markerOptions.title("I am here!");
    markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
    mCurrLocationMarker = mGoogleMap.addMarker(markerOptions);

    //move map camera
    mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(currentlatLng));
    mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(11));
}

在if语句中,当设置了片段的文本时,我想禁用搜索。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您可以做的是获取AppCompatEditText中包含的PlaceAutocompleteFragment对象并致电AppCompatEditText.setEnabled(false)以禁用它。

  PlaceAutocompleteFragment originAutocomplete = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.originAutocomplete);
  AppCompatEditText originEditText = (AppCompatEditText) originAutocomplete.getView().findViewById(R.id.place_autocomplete_search_input);
  originEditText.setEnabled(false);

答案 1 :(得分:0)

autocompleteFragment.getView().setEnabled(false);