无法解析充气器和容器

问题描述:

为什么在我的活动“inflater和容器”没有解决?我应该如何写他们?无法解析充气器和容器

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.KeyEvent; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.ProgressBar; 

public class GamesFragment extends Fragment { 

private ProgressBar progress; 
private WebView myWebView; 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    myUIUpdate(); 
    return null; 
} 

private void myUIUpdate() { 
    View rootView = inflater.inflate(R.layout.fragment_games, container, false); 


    String url = "http://gsmarena.com"; 
    myWebView = (WebView) rootView.findViewById(R.id.webViewGames); 
    myWebView.setWebChromeClient(new myWebViewClient()); 
    myWebView.getSettings().setJavaScriptEnabled(true); 
    progress = (ProgressBar) rootView.findViewById(R.id.progressBar); 
    myWebView.loadUrl(url); 
    progress.setMax(100); 


    myWebView.setWebViewClient(new WebViewClient() { 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView View, String url) { 
      View.loadUrl(url); 
      GamesFragment.this.progress.setProgress(0); 
      return true; 
     } 

    }); 


    myWebView.setOnKeyListener(new android.view.View.OnKeyListener() 

    { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (event.getAction() == KeyEvent.ACTION_DOWN) { 
       WebView webView = (WebView) v; 

       switch (keyCode) { 
        case KeyEvent.KEYCODE_BACK: 
         if (webView.canGoBack()) { 
          webView.goBack(); 
          return true; 
         } 
         break; 
       } 
      } 

      return false; 
     } 
    }); 
    return rootView; 

} 


private class myWebViewClient extends WebChromeClient { 
    @Override 
    public void onProgressChanged(WebView view, int newProgress) { 
     GamesFragment.this.setValue(newProgress); 
     super.onProgressChanged(view, newProgress); 
    } 
} 

@Override 
public void setUserVisibleHint(boolean visible) { 
    super.setUserVisibleHint(visible); 
    if (visible && isResumed()) { 
     myUIUpdate(); 
    } 
} 

public void setValue(int progress) { 
    this.progress.setProgress(progress); 
} 


} 

我试图附加myUIUdate,因为它在屏幕上不可见使用此状态下隐藏我的片段:

@Override 
public void setUserVisibleHint(boolean visible) { 
    super.setUserVisibleHint(visible); 
    if (visible && isResumed()) { 
     myUIUpdate(); 
    } 
    } 

PS:如果任何人有更好的主意来隐藏片段我爱听。

+0

您能指出错误显示的确切位置吗?顺便说一句,我看到充气机和容器不是实例变量。你在哪里初始化它们? – CKing

Bacause在myUIUpdate()方法它没有找到inflatercontainer .Therfore onCreateView写入myUIUpdat E();作为

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    myUIUpdate(inflater,container); 
} 

和变化在onViewCreated方法(更改return type也)作为

private void myUIUpdate() { 

private View myUIUpdate(LayoutInflater inflater, ViewGroup container) { 

编辑myUIUpdate和从onCreateView除去尽可能

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


@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    myUIUpdate(view); 
} 

和重写myUIUpdate方法

private void myUIUpdate(View view) { 
    String url = "http://gsmarena.com"; 
    myWebView = (WebView) view.findViewById(R.id.webViewGames); 
    myWebView.setWebChromeClient(new myWebViewClient()); 
    myWebView.getSettings().setJavaScriptEnabled(true); 
    progress = (ProgressBar) view.findViewById(R.id.progressBar); 
    myWebView.loadUrl(url); 
    progress.setMax(100); 

    myWebView.setWebViewClient(new WebViewClient() { 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView View, String url) { 
      View.loadUrl(url); 
      GamesFragment.this.progress.setProgress(0); 
      return true; 
     } 

    }); 

    myWebView.setOnKeyListener(new android.view.View.OnKeyListener() {@Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (event.getAction() == KeyEvent.ACTION_DOWN) { 
       WebView webView = (WebView) v; 

       switch (keyCode) { 
        case KeyEvent.KEYCODE_BACK: 
         if (webView.canGoBack()) { 
          webView.goBack(); 
          return true; 
         } 
         break; 
       } 
      } 
      return false; 
     } 
    }); 
} 
+0

应用之后。 myUIUpdate();在 覆盖 public void setUserVisibleHint(boolean visible){ super。setUserVisibleHint(可见); if(visible && isResumed()){ myUIUpdate();在GamesFragment }} 给我一个错误“myUIUpdate(layoutinflater,ViewGroup中)不能加入你的代码后,适用于() – Rahul

+0

,应用程序崩溃看看日志 E/AndroidRuntime(30911):显示java.lang.NullPointerException :尝试在空对象引用 – Rahul

+0

上调用虚拟方法'android.view.View android.view.View.findViewById(int)'再次在添加完编辑后的代码后,gamesfragment中的myUpdate()视图无法应用错误进来 boolean isResumed = FALSE; @Override 公共无效setUserVisibleHint(布尔isVisibleToUser){ super.setUserVisibleHint(isVisibleToUser); { 如果(isVisibleToUser && isResumed()){ myUIUpdate(); isResumed = true; } – Rahul

变化:

private void myUIUpdate() 

private void myUIUpdate(LayoutInflater inflater, ViewGroup container) 

,并通过充气和容器它:

myUIUpdate(inflater, container); 

LayoutInflater吹气,ViewGroup中容器,包savedInstanceState这些地方在您使用

无需创建定制的方法,并初始化所有视图块尝试覆盖onViewCreated并将所有myUIUpdate()代码移至onViewCreated。

@Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.info_fragment, container, false); 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     myWebView = (WebView) view.findViewById(R.id.webViewGames); 
     myWebView.setWebChromeClient(new myWebViewClient()); 
     myWebView.getSettings().setJavaScriptEnabled(true); 
     progress = (ProgressBar) view.findViewById(R.id.progressBar); 
     myWebView.loadUrl(url); 
     progress.setMax(100); 


     myWebView.setWebViewClient(new WebViewClient() { 

      @Override 
      public boolean shouldOverrideUrlLoading(WebView View, String url) { 
       View.loadUrl(url); 
       GamesFragment.this.progress.setProgress(0); 
       return true; 
      } 

     }); 


     myWebView.setOnKeyListener(new android.view.View.OnKeyListener() 

     { 
      @Override 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if (event.getAction() == KeyEvent.ACTION_DOWN) { 
        WebView webView = (WebView) v; 

        switch (keyCode) { 
         case KeyEvent.KEYCODE_BACK: 
          if (webView.canGoBack()) { 
           webView.goBack(); 
           return true; 
          } 
          break; 
        } 
       } 

       return false; 
      } 
     }); 
    } 

您在

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    myUIUpdate(); 
    return null; 
} 

得到inflatercontainer和他们在当地的存在。您必须将它们作为参数传递给myUIUpdate,或者在Activity内声明字段并将它们分配到onCreateView(这是一个丑陋的解决方案)。