Изменить текст в панели приложения из 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
        }
    }
});
Другие вопросы по тегам