android - 如何修复尝试在空对象引用上调用接口方法
问题描述
我试图在一个片段中实现一个监听器,让我知道父活动中的数据是否发生变化。
在 MainActiivty 中,我添加了这些代码行:
public ListenFromActivity activityListener;
public void setActivityListener(ListenFromActivity activityListener) {
this.activityListener = activityListener;
}
然后我在 MainActivity 的 onCreate 方法中添加了这些行:
ConnectFragment connectFragment =new ConnectFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame,connectFragment ).commit();
// this for is used to change data for testing
for(int i=0; i<5;i++){
activityListener.doSomethingInFragment(1+"");
}
在 ConnectFragment 中,我首先添加了实现我的接口:
public class ConnectFragment extends Fragment implements ListenFromActivity
然后在 onCreate 方法中我添加了这些行:
((HomeActivity) getActivity()).setActivityListener(ConnectFragment.this);
然后我在我的交互中执行了方法
@Override
public void doSomethingInFragment(String str) {
System.out.println(" listener from connectFragment "+ str);
}
最后这是我的界面:
public interface ListenFromActivity {
void doSomethingInFragment(String str);
}
解决方案
看起来您正试图让 Activity 告诉 Fragment 有关数据更改的信息。但是您设置它的方式使其过于复杂。在您的 MainActivity 中,您似乎已经拥有对 ConnectedFragment 的字段引用。您需要做的就是connectFragment. doSomethingInFragment("string");
在您创建片段并使用 FragmentTransaction 添加它之后调用 MainActivity。
推荐阅读
- python - 如何计算列中某个值的百分比?
- java - 尝试运行 jar 时,io.restassured.path.xml.XmlPath 无法转换为类 io.restassured.internal.path.xml.NodeChildrenImpl
- c# - 在 C# 中从文本文件生成 MD4 哈希
- assembly - 在 VSCode 编辑器的 UI 中以汇编语言正确折叠过程
- c# - 将 Application.Run() 放在与初始线程不同的线程中是否会产生后果?
- javascript - 通过 javascript 监听器发送 id
- r - 在 R 中,数据帧中每个 ID 的不同事件的平均数量是多少?
- database - 调整 pgBouncer 配置设置的推荐公式是什么
- wordpress - AzureAD 应用程序的多域身份验证
- java - 使用kafka jdbc sink连接器将json数据导入postgres