2017-01-27 19 views
1

基本上我有一個片段中的WebView,並有一個Java類,它檢查網絡的可用性。我可以爲真假條件做吐司消息。但是,由於WebView在另一個片段中,我無法使其加載URL。因此,我的問題是: 如何從另一個班級調用項目?如何在另一個類的片段中命令WebView?

編輯:

package com.sahin.spm; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.widget.Toast; 
import layout.fragHome; 

/** 
* Created by PD on 27.1.2017. 
*/ 
public class NetworkChangeReceiver extends BroadcastReceiver{ 
    private static final String LOG_TAG = "Connection control"; 
    static boolean isConnected = false; 

    @Override 
    public void onReceive(final Context context, final Intent intent) { 

     isNetworkAvailable(context); 

    } 


    private boolean isNetworkAvailable(Context context) { 
     ConnectivityManager connectivity = (ConnectivityManager) 
       context.getSystemService(Context.CONNECTIVITY_SERVICE); 

     if (connectivity != null) { 
      NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
      if (info != null) { 
       for (int i = 0; i < info.length; i++) { 
        if (info[i].getState() == NetworkInfo.State.CONNECTED) { 

         if(!isConnected){ 
          isConnected = true; 
          Toast.makeText(context, "Connected!", Toast.LENGTH_LONG).show(); 
          fragHome.loadWebViewUrl("http://www.google.com.tr"); 

         } 
         return true; 
        } 
       } 
      } 
     } 
     isConnected = false; 
     Toast.makeText(context, "No connection!", Toast.LENGTH_LONG).show(); 
     fragHome.loadWebViewUrl("file:///android_asset/noconnection.html"); 
     return false; 
    } 
} 

這是我的類,我控制連接,並希望web視圖根據連接狀態加載頁面。沒有錯誤,但這種方式不會加載。

fragHome.java

package layout; 

import android.app.ProgressDialog; 
import android.content.BroadcastReceiver; 
import android.content.IntentFilter; 
import android.net.ConnectivityManager; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.webkit.WebResourceRequest; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.Toast; 

import com.google.android.gms.ads.AdRequest; 
import com.google.android.gms.ads.AdView; 
import com.sahin.spm.NetworkChangeReceiver; 
import com.sahin.spm.R; 


public class fragHome extends Fragment { 
    private static final String LOG_TAG = "Auto control"; 
    private NetworkChangeReceiver receiver; 
    private static WebView webView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     final View rootView = inflater.inflate(R.layout.fragment_frag_home, container, false); 

     final WebView webView = (WebView) rootView.findViewById(R.id.hWebView); 
     webView.getSettings().setBuiltInZoomControls(false); 
     webView.getSettings().setSupportZoom(false); 
     webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
     webView.getSettings().setAllowFileAccess(true); 
     webView.getSettings().setDomStorageEnabled(true); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.setWebViewClient(new WebViewClient(){ 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
       view.loadUrl(request.getUrl().toString()); 
       return super.shouldOverrideUrlLoading(view, request); 
      } 
     }); 


     IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); 
     receiver = new NetworkChangeReceiver(); 
     getActivity().registerReceiver(receiver, filter); 


     return rootView; 

    } 
    public static void loadWebViewUrl(String url) { 
     if (webView != null) { 
      webView.loadUrl(url); 
     } 
    } 
    @Override 
    public void onDestroy() { 
     super.onDestroy(); 

     getActivity().unregisterReceiver(receiver); 

    } 

} 
+0

好吧,把fragHome代碼也。 –

+0

已添加。 @ A.Badakhshan –

+0

當NetworkChangeReceiver觸發時,用戶是否在fragHome中? –

回答

-1

簡單的方法是使用靜態WebView並使用靜態方法或直接調用它的URL的加載。

編輯:

public class WebViewerFragment extends Fragment { 

    private View rootView; 
    private static WebView webView; 

    public WebViewerFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, 
          ViewGroup container, 
          Bundle savedInstanceState) { 
     rootView = inflater.inflate(R.layout.fragment_web_viewer, container, false); 

     WebView webView = (WebView) rootView.findViewById(R.id.webview); 

     return rootView; 
    } 

    public static void loadWebViewUrl(String url) { 
     if (webView != null) { 
      webView.loadUrl(url); 
     } 
    } 
} 

這樣你就可以從這樣的任何地方調用loadWebViewUrl方法:

WebViewerFragment.loadWebViewUrl(desiredUrl); 

但是,你應該謹慎對待,重要的是webView實例不該」 t是null,所以WebViewerFragment必須在調用此方法之前進行初始化。

+0

我只是一個初學者。你能解釋一下嗎? –

+0

我不知道投票的原因,但如果你沒有解決你的問題,讓我知道,我會爲你解釋。 –

+0

我沒有故意投它,但我可能會意外點擊,對不起。我沒有解決問題。如果你能解釋它,我會很高興。 –

0

使用LocalBroadcastManager或EventBus庫。

在webview片段只是偵聽廣播/事件,然後加載網址。

+0

非常感謝。我會嘗試。 –

相關問題