2017-06-06 66 views
1

這是我的SwiftRefreshLayout的webview應用程序代碼。但SwipeRefresh無法正常工作,請檢查它。但其他所有的東西都能正常工作。像webview,菜單按鈕。SwipeRefreshLayout與Webview不工作

下面是我的activity_main.xml中文件

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout> 

    <android.support.v4.widget.SwipeRefreshLayout 
     android:id="@+id/swipe" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    <WebView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerHorizontal="true" 
     android:id="@+id/webView" 
     /> 
    </android.support.v4.widget.SwipeRefreshLayout> 
</RelativeLayout> 

這是我MainActivity.java文件

public class MainActivity extends AppCompatActivity { 

    WebView webView; 
    SwipeRefreshLayout swipe; 

    @Override 
    public boolean onCreateOptionsMenu (Menu manu){ 
     getMenuInflater().inflate(R.menu.main, manu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected (MenuItem item){ 
     int id=item.getItemId(); 
     if(id==R.id.id_about){ 
      Intent intentabout=new Intent(MainActivity.this, About.class); 
      startActivity(intentabout); 

      return true; 
     } 
     if(id==R.id.id_terms){ 

      return true; 
     } 
     if(id==R.id.id_privacy){ 

      return true; 
     } 
     return true; 
    } 


    @Override 
    public void onBackPressed() { 
     if(webView.canGoBack()) { 
      webView.goBack(); 
     } else { 
      super.onBackPressed(); 
     } 

    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     swipe = (SwipeRefreshLayout) findViewById(R.id.swipe); 
     swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
      @Override 
      public void onRefresh() { 
       LoadWeb(); 
      } 
     }); 

     LoadWeb(); 

    } 

    public void LoadWeb(){ 
     webView = (WebView) findViewById(R.id.webView); 
     WebSettings webSettings = webView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH); 
     webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); 
     webSettings.setDomStorageEnabled(true); 
     webSettings.setAppCacheEnabled(true); 
     webView.loadUrl("https://google.com"); 
     swipe.setRefreshing(true); 
     webView.setWebViewClient(new WebViewClient() { 
      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       webView.loadUrl("file:///android_asset/error.html"); 

      } 

      public void onPagefinished(WebView view, String url){ 
       swipe.setRefreshing(false); 
      } 
     }); 
    } 

} 
+1

您可以參考以下https://github.com/zhangle1/HelpText/tree/master/app/src – zhangle

回答

3

你得把你的WebView內SwipeRefreshLayout:

public class MainActivity extends AppCompatActivity { 

    WebView webView; 
    SwipeRefreshLayout swipeRefreshLayout; 
    String currentUrl = "https://www.google.co.in/"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     webView = (WebView) findViewById(R.id.webView); 
     swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout); 

     webView.loadUrl(currentUrl); 
     webView.setWebViewClient(new MyWebViewClient()); 

     swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
      @Override 
      public void onRefresh() { 
       webView.loadUrl(currentUrl); 
      } 
     }); 
    } 

    public class MyWebViewClient extends WebViewClient{ 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      swipeRefreshLayout.setRefreshing(false); 
      currentUrl = url; 
      super.onPageFinished(view, url); 
     } 
    } 
} 

swipeRefreshLayout.setRefreshing(假)■頂級動畫。

+0

謝謝Harshil。現在它的工作。非常感謝你。現在我有一個問題如何在初始webview加載時顯示加載輪。 – cool

+0

這裏我已經添加加載輪初始化webview時https://stackoverflow.com/questions/44407308/loading-wheel-on-initial-webview-loading/44407309#44407309 –

1

你可以把你的網頁視圖一個NestedScrollView內,使這項工作。

例子:

<android.support.v4.widget.SwipeRefreshLayout 
android:id="@+id/swipe" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

<android.support.v4.widget.NestedScrollView 
    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" /> 

</android.support.v4.widget.NestedScrollView> 

+0

感謝您的回覆,但它不工作。 – cool

2

您應該添加

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    swipe = (SwipeRefreshLayout) findViewById(R.id.swipe); 
    swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      LoadWeb(); 
     } 
    }); 
    swipe.setRefreshing(true); //add 
    LoadWeb(); 

} 
LoadWeb(); 
+0

請提及哪裏?謝謝 – cool

+0

您需要自動將刷新狀態更改爲true,以便裝載將嘗試顯示 – zhangle

+0

,但沒有裝入輪或刷新的跡象。 – cool