gpt4 book ai didi

android - 从 Fragment 实现接口(interface)初始化接口(interface)

转载 作者:行者123 更新时间:2023-11-29 00:04:24 26 4
gpt4 key购买 nike

我有一个 Activity(MainActivity.java) ,一个 Fragment(HomeFragment.java) 里面Activity(MainActivity.java) 和一个接口(interface)(WebViewListener)。我的 Fragment 实现了 interface 并且里面有一个 WebView

我的界面是:

WebView 监听器

public interface WebViewListener {
public void interactWithWebView();
}

我的 fragment 是:

HomeFragment.java

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 中,我有一个Button,点击那个Button 我初始化接口(interface)并调用接口(interface)方法。 (在接口(interface)方法中,我在 WebView 中加载了 google url)。

我的 Activity 是:

MainActivity.java

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

这是我的问题:

如果我初始化 WebViewListener 接口(interface)并调用其方法,请在 Button 上的 MainActivity 中单击,如下所示

WebViewListener webViewListener=new HomeFragment();
webViewListener.interactWithWebView();

WebViewinteractWithWebView() 方法中给出了 NullPointerException

如果我初始化 WebViewListener 接口(interface)并像这样调用它的方法:

WebViewListener webViewListener = (WebViewListener) getSupportFragmentManager().findFragmentByTag(fragmentName);
webViewListener.interactWithWebView();

WebViewinteractWithWebView() 方法中加载 google url 非常好。背后的原因是什么?

最佳答案

我认为当您创建 fragment 的新实例并将其用作 WebViewListener 时,您将面临 NullPointerException 因为在 interactWithWebView 方法中,您的 webView 对象为空,因为没有 View 被膨胀并且没有 webView,但是当您使用 getSupportFragmentManager().findFragmentByTag(fragmentName); 时,您引用的是先前定义的 fragment 膨胀了它的 View 并且有一个有效的 webView 对象,你可以毫无问题地使用它。

关于android - 从 Fragment 实现接口(interface)初始化接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34993099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com