Ответ на запрос обновления

Попробуйте способ создания композиций.
Jetpack Compose — рекомендуемый набор инструментов для создания пользовательского интерфейса для Android. Узнайте, как обновить страницу с помощью жеста «потянуть вниз» в Compose.

В этом документе показано, как обновить приложение, когда пользователь запрашивает ручное обновление, независимо от того, запускает ли он его жестом смахивания или использует действие обновления на панели действий.

Ответьте на жест обновления.

Когда пользователь выполняет жест обновления страницы с помощью свайпа, система отображает индикатор выполнения и вызывает метод обратного вызова вашего приложения. Ваш метод обратного вызова отвечает за обновление данных приложения.

Чтобы реагировать на жест обновления в вашем приложении, реализуйте интерфейс SwipeRefreshLayout.OnRefreshListener и его метод onRefresh() . Метод onRefresh() вызывается, когда пользователь выполняет жест смахивания.

Вынесите код для фактической операции обновления в отдельный метод, предпочтительно в ViewModel , и вызывайте этот метод обновления из вашей реализации onRefresh() . Таким образом, вы сможете использовать один и тот же метод обновления для выполнения обновления, когда пользователь инициирует обновление с панели действий.

В методе обновления вызовите setRefreshing(false) после завершения обновления данных. Вызов этого метода даст указание SwipeRefreshLayout удалить индикатор выполнения и обновить содержимое представления.

Например, следующий код реализует onRefresh() и вызывает метод myUpdateOperation() для обновления данных, отображаемых в ListView :

Котлин

// Sets up a SwipeRefreshLayout.OnRefreshListener that invokes when
// the user performs a swipe-to-refresh gesture.

mySwipeRefreshLayout.setOnRefreshListener {
    Log.i(LOG_TAG, "onRefresh called from SwipeRefreshLayout")

    // This method performs the actual data-refresh operation and calls
    // setRefreshing(false) when it finishes.
    myUpdateOperation()
}

Java

// Sets up a SwipeRefreshLayout.OnRefreshListener that is invoked when
// the user performs a swipe-to-refresh gesture.

mySwipeRefreshLayout.setOnRefreshListener(() -> {
    Log.i(LOG_TAG, "onRefresh called from SwipeRefreshLayout");

    // This method performs the actual data-refresh operation and calls
    // setRefreshing(false) when it finishes.
    myUpdateOperation();
  }
);

Ответьте на действие обновления.

Если пользователь запрашивает обновление с помощью панели действий, система вызывает метод onOptionsItemSelected() . Ваше приложение реагирует на этот вызов, отображая индикатор выполнения и обновляя данные приложения.

Чтобы отреагировать на обновление, переопределите метод onOptionsItemSelected() . В этом переопределенном методе вызовите индикатор выполнения SwipeRefreshLayout , используя метод setRefreshing() со значением true , а затем выполните операцию обновления. Фактическое обновление следует выполнять в отдельном методе, чтобы один и тот же метод можно было вызывать независимо от того, запускает ли пользователь обновление с помощью свайпа или использует панель действий. После завершения обновления вызовите метод setRefreshing(false) , чтобы удалить индикатор выполнения обновления.

Следующий код показывает, как реагировать на запрос:

Котлин

// Listen for option item selections to receive a notification when the user
// requests a refresh by selecting the refresh action bar item.

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when (item.itemId) {

        // Check whether the user triggers a refresh:
        R.id.menu_refresh -> {
            Log.i(LOG_TAG, "Refresh menu item selected")

            // Signal SwipeRefreshLayout to start the progress indicator.
            mySwipeRefreshLayout.isRefreshing = true

            // Start the refresh background task. This method calls
            // setRefreshing(false) when it finishes.
            myUpdateOperation()

            return true
        }
    }

    // User doesn't trigger a refresh. Let the superclass handle this action.
    return super.onOptionsItemSelected(item)
}

Java

// Listen for option item selections to receive a notification when the user
// requests a refresh by selecting the refresh action bar item.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        // Check whether the user triggers a refresh:
        case R.id.menu_refresh:
            Log.i(LOG_TAG, "Refresh menu item selected");

            // Signal SwipeRefreshLayout to start the progress indicator.
            mySwipeRefreshLayout.setRefreshing(true);

            // Start the refresh background task. This method calls
            // setRefreshing(false) when it finishes.
            myUpdateOperation();

            return true;
    }

    // User doesn't trigger a refresh. Let the superclass handle this action.
    return super.onOptionsItemSelected(item);
}