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