java - 如何使用接口在片段和活动之间进行通信?
问题描述
我只是想从我的 MainActivity 中调用 Fragment 方法。
所以我尝试使用一个接口。
public interface MyInterface {
void testMethod();
}
在我的片段(TestFragment.java)中,我实现了接口并覆盖了 testMethod 方法。
@Override
public void testMethod() {
Toast.makeText(getActivity(), "Test", Toast.LENGTH_LONG).show();
}
但是现在我想在调用 onRewardedVideoCompleted get 后立即从我的 MainActivity 调用此方法,但我不知道该怎么做。我试过这样:
MyInterface myInterface = new TestFragment();
myInterface.testMethod();
但在这里我得到一个 nullPointerException:
尝试在引用 Toast 消息的空对象引用上调用虚拟方法“java.lang.String android.content.Context.getPackageName()”。
如何在 MainActivity 中从我的接口调用该方法而不会收到 NullPointerException?
谢谢
解决方案
您需要为它创建接口,如下所示
public interface FilterValuePassInterface {
public void onSelectedFilterValue(String name);
}
片段类应如下所示
class MyFragment extends Fragment implements FilterValuePassInterface {
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
try {
((YOUR_ACTIVITY) getActivity()).setOnDataListener(this);
} catch (Exception ex) {
ex.printStackTrace();
}
}
@Override
public void onSelectedFilterValue(String name) {
}
}
在Activity
类内部,您需要创建方法setOnDataListener
并初始化片段,如下所示
MyFragment myFragment;
public void setOnDataListener(MyFragment myFragment) {
this.myFragment = myFragment;
}
再次在活动内部,您可以从任何点击或事件发送数据,您只需从活动中调用此方法即可在片段中传输数据,如下所示
YOUR_CLICK.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
myFragment.onSelectedFilterValue("YOUR_MSG");
}
});
推荐阅读
- .htaccess - 为 Google Pagespeed 缓存终身“最佳实践”
- django - Django 在多对多领域搜索
- python - 导入错误:无法从部分初始化的模块“matplotlib”导入名称“ft2font”
- vue.js - Vue:如何从秒开始计时?
- mongodb - MongoDB 4.0.12 使用 concat 更新嵌套数组
- google-apps-script - 如何获取谷歌电子表格的共享链接?
- html - jquery load() 或 innerHtml 不会将内容放在目标元素内
- amazon-web-services - Amazon Athena:如何一次删除所有分区
- javascript - 获取仅匹配直接前任的字符串
- angular - 检查空组并将其从数组中删除