无法解析充气器和容器
为什么在我的活动“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:如果任何人有更好的主意来隐藏片段我爱听。
Bacause在myUIUpdate()
方法它没有找到inflater
和container
.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;
}
});
}
应用之后。 myUIUpdate();在 覆盖 public void setUserVisibleHint(boolean visible){ super。setUserVisibleHint(可见); if(visible && isResumed()){ myUIUpdate();在GamesFragment }} 给我一个错误“myUIUpdate(layoutinflater,ViewGroup中)不能加入你的代码后,适用于() – Rahul
,应用程序崩溃看看日志 E/AndroidRuntime(30911):显示java.lang.NullPointerException :尝试在空对象引用 – Rahul
上调用虚拟方法'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;
}
得到inflater
和container
和他们在当地的存在。您必须将它们作为参数传递给myUIUpdate
,或者在Activity
内声明字段并将它们分配到onCreateView
(这是一个丑陋的解决方案)。
您能指出错误显示的确切位置吗?顺便说一句,我看到充气机和容器不是实例变量。你在哪里初始化它们? – CKing