У меня есть два занятия: MainActivity и еще одно, называемое DetailActivity. При первом запуске приложение открывает MainActivity и там связывает DataService и выполняет вызов для получения некоторых данных и заполнения представления списка.

Из этого представления списка у пользователя есть кнопка для открытия так называемого подробного представления для каждого элемента в списке. Открытие этого подробного представления означает запуск второго действия (DetailActivity).

Делается это так:

final Intent intent = new Intent(getContext(), DetailActivity.class);
intent.putExtra("data", dto);
getContext().startActivity(intent);

Когда открывается второй, пользователь может вернуться либо с помощью кнопки «Назад» (одна слева от кнопки «Домой» на Android), либо щелкнув стрелку назад в заголовке.

Все работает, как ожидалось, за исключением того, что когда пользователь возвращается к MainActivity, DataService снова привязывается и выполняется вызов для получения данных, а список обновляется. Итак, если пользователь находится где-то в пункте № 205 он будет возвращен обратно в стартовую позицию.

Есть ли способ сохранить данные или состояние MainActivity, когда пользователь возвращается к нему, когда он не обновлен?

Служба связана вот так

@Override
protected void onStart() {
    super.onStart();
    bind(DataService.class);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unbindService(connection);
}

private void bind(final Class... toBind) {
    for (final Class clazz : toBind) {
        bindService(new Intent(this, clazz), connection, BIND_AUTO_CREATE);
    }
}

private ServiceConnection connection = new ServiceConnection() {
    @Override
    public void onServiceConnected(final ComponentName name, final IBinder service) {
        if (service instanceof DataService.LocalBinder) {
            dataService = ((DataService.LocalBinder) service).getInstance();
            dataService.readData();
        }
    }

    @Override
    public void onServiceDisconnected(final ComponentName name) {
        // Empty By Default
    }
};
1
mirzak 23 Окт 2018 в 22:24

2 ответа

Лучший ответ

Удалось решить это вот так

@Override
public boolean onSupportNavigateUp() {
    onBackPressed(); // one inherited from android.support.v4.app.FragmentActivity

    return false;
}

Делая это таким образом, я получал свое. Я бы вернулся туда, откуда уехал, и нет необходимости загружать какие-либо данные, так как все уже есть

0
mirzak 10 Ноя 2018 в 17:21

Этого можно добиться, привязав службу к onCreate() вместо onStart().

Вам также следует обратить внимание на симметрию своего жизненного цикла. В настоящее время вы привязываете start и unbinding при уничтожении. Если вы выполняете привязку в onStart, вам, вероятно, следует отменить привязку в onStop. Когда вы перемещаете привязку в onCreate, вы можете оставить привязку в onDestroy

Объяснение: onCreate() вызывается, когда действие создается первым. onStart() вызывается каждый раз, когда ваша активность становится видимой.

0
Hendrik Marx 23 Окт 2018 в 19:40
52956483