2017-01-27 13 views
1

В основном у меня есть WebView во фрагменте, и есть класс java, который проверяет доступность сети. Я могу делать тосты для истинных и ложных условий. Но поскольку WebView находится в другом фрагменте, я не могу заставить его загружать URL-адрес. Таким образом, мой вопрос: Как я могу вызвать элемент из другого класса?Как я могу управлять WebView в фрагменте из другого класса?

Edit:

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; 
    } 
} 

Это мой класс, в котором я могу контролировать соединение и хочу WebView, чтобы загрузить страницу в соответствии с состоянием соединения. Нет ошибки, но при этом она не загружается.

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

Является ли пользователь в fragHome, когда NetworkChangeReceiver запускает? –

ответ

-1

Легкий способ будет использовать статический WebView и вызвать загрузку его URL, используя статический метод или непосредственно.

EDIT:

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.

На фрагменте веб-просмотра просто слушайте трансляцию/событие и загружайте URL-адрес.

+0

Большое спасибо. Я попробую. –

 Смежные вопросы

  • Нет связанных вопросов^_^