2017-06-06 68 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