Как сохранить состояние активности андроида - PullRequest
0 голосов
/ 23 октября 2018

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

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

Это делается так:

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

Когда открывается второе, пользователь может вернуться назад, используя backКнопка (слева от кнопки «Домой» на 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
    }
};

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Удалось решить это следующим образом

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

    return false;
}

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

0 голосов
/ 23 октября 2018

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

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

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

...