این سند نشان میدهد که وقتی کاربر درخواست بازخوانی دستی میکند، چگونه برنامه خود را بهروزرسانی کنید، خواه آن را با حرکت تند کشیدن فعال کند یا از اقدام بهروزرسانی نوار اقدام استفاده کند.
به ژست تازه کردن پاسخ دهید
وقتی کاربر ژست تند کشیدن برای بازخوانی را انجام میدهد، سیستم نشانگر پیشرفت را نشان میدهد و روش برگشت تماس برنامه شما را فراخوانی میکند. روش پاسخ به تماس شما مسئول به روز رسانی داده های برنامه است.
برای پاسخ به حرکت تازه کردن در برنامه خود، رابط 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() }
جاوا
// 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()
را لغو کنید. در روش override، با فراخوانی setRefreshing()
با مقدار true
، نشانگر پیشرفت SwipeRefreshLayout
را فعال کنید، سپس عملیات بهروزرسانی را انجام دهید. به روز رسانی واقعی را در یک روش جداگانه انجام دهید، بنابراین می توان همان روش را فراخوانی کرد که آیا کاربر به روز رسانی را با سوایپ راه اندازی می کند یا از نوار عمل استفاده می کند. هنگامی که به روز رسانی به پایان رسید، با 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) }
جاوا
// 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); }