איך עונים לבקשה לרענון

במסמך הזה מוסבר איך לעדכן את האפליקציה כשמשתמש מבקש לרענן, אם הם מפעילים אותו באמצעות תנועת החלקה או משתמשים בסרגל הפעולות פעולת הרענון.

להגיב לתנועת הרענון

כשהמשתמש מבצע את תנועת ההחלקה לרענון, המערכת מציגה את מחוון התקדמות וקורא לשיטת הקריאה החוזרת של האפליקציה שלך. שיטת הקריאה החוזרת שלך היא אחראי לעדכון נתוני האפליקציה.

כדי להגיב לתנועה הרענון באפליקציה, צריך להטמיע את SwipeRefreshLayout.OnRefreshListener של ממשק המשתמש onRefresh() . השיטה onRefresh() מופעלת כשהמשתמש מבצע תנועת החלקה.

יש להזין את הקוד עבור פעולת העדכון בפועל בשיטה נפרדת, עדיף בקובץ ViewModel, וקוראים לשיטת העדכון הזו הטמעת onRefresh(). כך אפשר להשתמש באותו עדכון לביצוע העדכון כשהמשתמש מפעיל רענון מהפעולה בר.

בשיטת העדכון, מתקשרים setRefreshing(false) כאשר עדכון הנתונים מסתיים. קריאה לשיטה זו מורה SwipeRefreshLayout כדי להסיר את אינדיקטור ההתקדמות ולעדכן את תוכן התצוגה.

לדוגמה, הקוד הבא מיישם את onRefresh() וגם מפעילה את השיטה myUpdateOperation() כדי לעדכן את הנתונים המוצגים על ידי ListView:

Kotlin

// 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, ואז מבצעים את הפעולה פעולת עדכון. מבצעים את העדכון עצמו בשיטה נפרדת, כך ניתן לקרוא ל-method אם המשתמש מפעיל את העדכון בהחלקה או משתמש סרגל הפעולות. כשהעדכון יסתיים, צריך להתקשר למספר setRefreshing(false) כדי להסיר את אינדיקטור ההתקדמות של הרענון.

הקוד הבא מראה איך להגיב לפעולת הבקשה:

Kotlin

// 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);
}