我{{1>}( MainActivity.java ),{{1>}( HomeFragment.java ){{1} ( MainActivity.java )和Activity
( WebViewListener )。我的Fragment
实施了Activity
,其中包含interface
。
我的界面是:
WebViewListener
Fragment
我的片段是:
HomeFragment.java
interface
在我的WebView
我有public interface WebViewListener {
public void interactWithWebView();
}
,点击public class HomeFragment extends Fragment implements WebViewListener {
private WebView webView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_home, container, false);
webView = (WebView) v.findViewById(R.id.webView);
...
webView.loadUrl("file:///android_asset/dropdown.html");
return v;
}
@Override
public void interactWithWebView() {
webView.loadUrl("https://www.google.co.in/");
}
}
我初始化界面并调用界面方法。 (在界面方法中,我在Activity
中加载了google网址。)
我的活动是:
MainActivity.java
Button
以下是我的问题:
在Button
上的MainActivity中,如果我初始化WebView
界面并按下面的方式调用其方法
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn= (Button ) findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Intialize interface and call interface method...
}
});
}
}
Button
在WebViewListener
方法中提供WebViewListener webViewListener=new HomeFragment();
webViewListener.interactWithWebView();
。
如果我初始化WebViewListener接口并调用它的方法:
WebView
NullPointerException
在interactWithWebView()
方法中加载google网址非常好。它背后的原因是什么?
答案 0 :(得分:2)
我认为在您创建片段的新实例并将其用作WebViewListener
时,您将面临NullPointerException
,因为在interactWithWebView
方法中,您的webView
对象是null因为没有视图被夸大并且没有webView,但是当你使用getSupportFragmentManager().findFragmentByTag(fragmentName);
时,你引用了一个先前定义的片段,该片段膨胀了它的视图并且有一个有效的webView对象,你使用它没有问题。