从Fragment初始化接口实现接口

时间:2016-01-25 12:51:11

标签: android android-fragments android-activity interface android-webview

我{{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...
            }
        });
    }
}

ButtonWebViewListener方法中提供WebViewListener webViewListener=new HomeFragment(); webViewListener.interactWithWebView();

如果我初始化WebViewListener接口并调用它的方法:

WebView

NullPointerExceptioninteractWithWebView()方法中加载google网址非常好。它背后的原因是什么?

1 个答案:

答案 0 :(得分:2)

我认为在您创建片段的新实例并将其用作WebViewListener时,您将面临NullPointerException,因为在interactWithWebView方法中,您的webView对象是null因为没有视图被夸大并且没有webView,但是当你使用getSupportFragmentManager().findFragmentByTag(fragmentName);时,你引用了一个先前定义的片段,该片段膨胀了它的视图并且有一个有效的webView对象,你使用它没有问题。