Изменить текст в панели приложения из setResultCallback
В моем приложении я хочу установить название места в панели приложений.
Идентификатор места, полученного в результате предыдущего действия, и в текущем действии я хочу получить это место по идентификатору, я использую документацию от Google Api Places для Android, но мой код не работает.
public class PlaceInfoActivity extends AppCompatActivity implements OnConnectionFailedListener {
@BindView(R.id.placeinfo_toolbar) Toolbar mToolbar;
private static final String TAG = "place info";
private Place place;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_place_info);
ButterKnife.bind(this);
final String placeID = getIntent().getStringExtra("PLACE_ID");
setSupportActionBar(mToolbar);
...
Places.GeoDataApi.getPlaceById(mGoogleApiClient, placeId)
.setResultCallback(new ResultCallback<PlaceBuffer>() {
@Override
public void onResult(PlaceBuffer places) {
if (places.getStatus().isSuccess() && places.getCount() > 0) {
place = places.get(0);
Log.i(TAG, "Place found: " + myPlace.getName());
} else {
Log.e(TAG, "Place not found");
}
places.release();
}
});
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle(place.getName()); // <- place is null
}
}
}
Как я понял, метод getPlaceById()
работает по принципу асинхронной задачи, но тогда как я могу определить, когда place
будет инициализироваться и изменить текст в панели приложения? Спасибо!
1 ответ
Попробуйте это изменение в вашем коде. Вы должны обновить свой заголовок в рамках обратного вызова
Places.GeoDataApi.getPlaceById(mGoogleApiClient, placeId)
.setResultCallback(new ResultCallback<PlaceBuffer>() {
@Override
public void onResult(PlaceBuffer places) {
if (places.getStatus().isSuccess() && places.getCount() > 0) {
place = places.get(0);
Log.i(TAG, "Place found: " + myPlace.getName());
} else {
Log.e(TAG, "Place not found");
}
places.release();
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle(place.getName()); // <- Move this to inside the callback
}
}
});