谷歌最近更新了他们的 Android Places SDK,因此我也在更新我的代码。我尝试使用 AutocompleteSupportFragment
来允许用户设置他们的地址。
这是我的代码:
mAddressEditText = (AutocompleteSupportFragment) getSupportFragmentManager().findFragmentById(R.id.address);
mAddressEditText.setPlaceFields(Arrays.asList(Place.Field.ADDRESS, Place.Field.LAT_LNG));
mAddressEditText.setHint("Address");
mAddressEditText.setText("Test1"); // Works fine at the beginning, disappears after selecting a place and shows only the hint
mAddressEditText.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(Place place) {
Log.d(TAG, "Place Selected");
// Other Stuff
mAddressEditText.setText("Test2"); // Doesn't Work, all I can see is the hint
mAddressEditText.setText(place.getAddress()); // Doesn't Work, all I can see is the hint
}
@Override
public void onError(Status status) {
Log.e(TAG, "An error occurred: " + status);
invalidAddressDialog.show();
}
});
在之前的SDK中,片段会自动将文本设置为所选地址。但在新的SDK中,这种方法不起作用(不确定是否是有意为之)。因此,我正在尝试手动设置它。正如您在我的代码注释中看到的那样,在侦听器外部使用setText可以正常工作,而在侦听器内部则不能正常工作。
我做错了什么还是这是一个错误?
编辑: 这么长时间过去了,我仍然无法得到一个合适的解决方法。 要完全清楚,我可以从片段中正确获取地址,唯一不能正常工作的是setText。
然而,由于一些答案指出他们没有遇到同样的问题,我开始思考可能与我正在使用的库版本有关?
这些是我在build.gradle中拥有的库:
api 'com.android.support:appcompat-v7:28.0.0'
api 'com.android.support:support-annotations:28.0.0'
api 'com.android.support:multidex:1.0.3'
api 'com.google.firebase:firebase-core:16.0.8'
api 'com.google.firebase:firebase-auth:16.2.1'
api 'com.google.firebase:firebase-firestore:18.2.0'
api 'com.google.firebase:firebase-storage:16.1.0'
api 'com.google.android.libraries.places:places:1.1.0'