我试图在一个片段中实现一个listenner,它允许我知道父活动中的数据是否发生了变化。
在MainActivity中,我添加了以下代码行:

public ListenFromActivity activityListener;
public void setActivityListener(ListenFromActivity activityListener) {
    this.activityListener = activityListener;
}

然后我在main活动中的oncreate methode中添加了这些行:
connectFragment connectFragment=新的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);
}

最佳答案

如果在mainactivity oncreate中直接这样写for循环,它将在片段的oncreate中调用((HomeActivity) getActivity()).setActivityListener(ConnectFragment.this);之前执行。因此,activitylistener变量为空,您将获得一个空对象引用。片段事务和使用activityListener变量之间应该有延迟。

09-12 05:27