首页 > 解决方案 > 如何修复尝试在空对象引用上调用接口方法

问题描述

我试图在一个片段中实现一个监听器,让我知道父活动中的数据是否发生变化。

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

标签: androidlistener

解决方案


看起来您正试图让 Activity 告诉 Fragment 有关数据更改的信息。但是您设置它的方式使其过于复杂。在您的 MainActivity 中,您似乎已经拥有对 ConnectedFragment 的字段引用。您需要做的就是connectFragment. doSomethingInFragment("string");在您创建片段并使用 FragmentTransaction 添加它之后调用 MainActivity。


推荐阅读