می خواهیم با پایین کشیدن صفحه ، محتوا رفرش یا بروزرسانی شود!
- نفیسه افقی 5 سال قبل سوال کرد
- آخرین ویرایش 5 سال قبل
- شما باید برای ارسال دیدگاه وارد شوید
برای این کار، از کلاس SwipeRefreshLayout
استفاده می کنیم.
فرض کنید یک Webview تعریف کرده ایم که محتوای یک سایت را نمایش دهد. (از این لینک می توانید نحوه استفاده از Webview را آموزش ببینید).
ابتدا در فایل layout ، یک SwipeRefreshLayout
را تعریف می کنیم بطوریکه Webview داخل آن قرار گرفته باشد:
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/refresh_container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
فایل اکتیویتی مان بدین صورت می شود:
public class MainActivity extends AppCompatActivity {
private WebView webView;
private String siteUrl = "https://www.mustang.ir";
private String currentUrl = siteUrl;
private SwipeRefreshLayout swipeLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
swipeLayout = (SwipeRefreshLayout) findViewById(R.id.refresh_container);
webView = (WebView) findViewById(R.id.webView);
webView.loadUrl(siteUrl);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
WebSettings webSettings = webView.getSettings();
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setPluginState(WebSettings.PluginState.ON);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
findViewById(R.id.progressBar1).setVisibility(View.VISIBLE);
view.loadUrl(url);
currentUrl=url;
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
findViewById(R.id.progressBar1).setVisibility(View.GONE);
swipeLayout.setRefreshing(false);
findViewById(R.id.welcome_screen).setVisibility(View.GONE);
}
});
//swipe to refresh
swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
webView.loadUrl(currentUrl);
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
//if Back key pressed and webview can navigate to previous page
webView.goBack();
// go back to previous page
return true;
}
else
{
finish();
// finish the activity
}
return super.onKeyDown(keyCode, event);
}
دو قسمت از کد بالا مربوط به SwipeRefreshLayout
می شود:
- در تابع
setOnRefreshListener
تعیین می کنیم که با رفرش شدن صفحه چه اتفاقی بیفتد (در اینجا ما مجدداً صفحه فعلی Webview را لود می کنیم). - دقت کنید که پس از لود صفحه (یعنی در تابع
onPageFinished
) ، باید آن را از حالت رفرش خارج کنیم (در غیر اینصورت آن دایره چرخان برای همیشه خواهد چرخید).
- نفیسه افقی 5 سال قبل پاسخ داد
- آخرین ویرایش 5 سال قبل
- شما باید برای ارسال دیدگاه وارد شوید