片段间的Android通信

片段间的Android通信,android,android-fragments,Android,Android Fragments,'我试图通过活动将数据从一个片段发送到另一个片段。 可以将数据从GroupFragment发送到包含正确值的ChatActivity id,但当其达到以下值时: @Override public void respond(String id) { interfaceDataCommunicatorFromActivity.respond(id); } 在我的聊天活动中,它抛出一个NUllPointException,我不知道如何使它工作 当我只粘贴代码的一部分时,我试图让你更容易阅读,

'我试图通过活动将数据从一个片段发送到另一个片段。 可以将数据从GroupFragment发送到包含正确值的ChatActivity id,但当其达到以下值时:

@Override
public void respond(String id) {
    interfaceDataCommunicatorFromActivity.respond(id);
}
在我的聊天活动中,它抛出一个NUllPointException,我不知道如何使它工作

当我只粘贴代码的一部分时,我试图让你更容易阅读,如果没有帮助,我会友好地纠正我!对于所有代码:

聊天活动:

public class ChatActivity extends Activity implements
    GroupFragment.OnFragmentInteractionListener,
    //ChatFragment.OnFragmentInteractionListener,
    GroupFragment.InterfaceDataCommunicator {

    public InterfaceDataCommunicatorFromActivity interfaceDataCommunicatorFromActivity;

    @Override
    public void respond(String id) {
        interfaceDataCommunicatorFromActivity.respond(id);
    }

    public interface InterfaceDataCommunicatorFromActivity {
        public void respond(String id);
    }
}
组片段:

public class GroupFragment extends Fragment {
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";
    public InterfaceDataCommunicator interfaceDataCommunicater;
    ...../


    public void CreateNewGroup(String groupName) {

        Map<String, Group> newGroup = new HashMap<>();

        Firebase  firebaserootRef = new Firebase("https://luminous-heat-420.firebaseio.com");

        Firebase firebaseGroup = firebaserootRef.child("").push();

        Group group = new Group();

        group.SetID(firebaseGroup.getKey());
        group.SetName(groupName);

        String id = firebaseGroup.getKey();
        firebaseGroup.child("id").setValue(group.GetId());
        firebaseGroup.child("name").setValue(group.GetName());

        newGroup.put(id, group);

        interfaceDataCommunicater.respond(group.GetId());
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }

        try {
            interfaceDataCommunicater = (InterfaceDataCommunicator) activity;
        } catch (ClassCastException c) {
            throw new ClassCastException(activity.toString()
                    + " must implement InterfaceDataCommunicator");
        }
    }

    public interface OnFragmentInteractionListener {
        // TODO: Update argument type and name
        public void onFragmentInteraction(Uri uri);
    }

    public interface InterfaceDataCommunicator{
        public void respond(String id);
    }
}
你的活动中的interfaceDataComunicatorFromActivity是无用的,你会得到一个NPE,因为没有引用它。如果您只想在ChatFragment中输入组的id,只需通过ChangeToChatFragment中的setter传递即可:

public class ChatFragment extends Fragment implements
    View.OnClickListener,
    ChatActivity.InterfaceDataCommunicatorFromActivity {

    public ChatActivity.InterfaceDataCommunicatorFromActivity
           interfaceDataCommunicatorFromActivity; 

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }

        try {
            interfaceDataCommunicatorFromActivity = (ChatActivity
               .InterfaceDataCommunicatorFromActivity) activity;    
        } catch (ClassCastException c) {
            throw new ClassCastException(activity.toString()
                    + " must implement InterfaceDataCommunicator");
        }
    }


    public interface OnFragmentInteractionListener {
        // TODO: Update argument type and name
        public void onFragmentInteraction(Uri uri);
    }

    @Override
    public void respond(String id) {
        this.groupID = id;
    }
}
编辑:

在聊天室中添加:


然后将您的groupId作为参数传递给ChangeToChatFragment

考虑使用广播而不是接口在哪里初始化field InterfacedataCommunicationorFromActivity?我的意思是,您没有在活动中为该字段设置任何值,因此很明显在那里会出现空指针异常。Thx对于快速答案和您的解决方案有效,但只是为了澄清其他有相同问题的人,我需要添加一个SetGroupIDString groupId{return this.group=groupId;}在我的聊天片段中,我在课堂上寻找字符串。。。
public void ChangeToChatFragment(String groupId) {
    ChatFragment groupFragment = ChatFragment.newInstance("", "");
    groupFragment.setGroupId(groupId);
    FragmentManager fM = getFragmentManager();
    FragmentTransaction fT = fM.beginTransaction();
    fT.replace(R.id.container_chat, groupFragment, null);
    fT.addToBackStack("go to chat fragmement");
    fT.commit();
}
public void setGroupId(String groupId){
   this.groupId = groupId;
}