片段之间的Android通信

用户名

http://pastebin.com/p9FCCMX1I正在尝试通过活动将数据从一个片段发送到另一个片段。可以将数据从GroupFragment发送到ChatActivity(id包含正确的值),但是当到达时:

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

在我的ChatActivity中,它抛出NUllPointException,我不知道如何使其工作?

(当我只粘贴部分代码时,我试图使您更容易阅读,如果没有帮助,它会友好并纠正我!对于所有代码:“ http://pastebin.com/p9FCCMX1 ”)

ChatActivity:

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

GroupFragment:

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

聊天片段:

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;
    }
}
维尼修斯

interfaceDataComunicatorFromActivity您的活动中in是无用的,并且您正在获得NPE,因为没有引用它。如果你只是希望你在你的组ID ChatFragment,只是通过它传递setter在你的ChangeToChatFragment()

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

编辑:

在您的ChatFragment添加中:

public void setGroupId(String groupId){
   this.groupId = groupId;
}

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

android中片段之间的通信

来自分类Dev

Activity与Android中多个片段之间的通信

来自分类Dev

Android在嵌套片段之间进行通信

来自分类Dev

片段之间的通信与ViewPager

来自分类Dev

片段之间进行通信

来自分类Dev

ViewPager中片段之间的通信

来自分类Dev

片段之间的动态通信失败

来自分类Dev

片段之间的正确通信方式

来自分类Dev

导航抽屉中片段之间的通信

来自分类Dev

两个片段之间的通信

来自分类Dev

片段与未连接的活动之间如何通信?

来自分类Dev

导航抽屉中片段之间的通信

来自分类Dev

嵌套片段/活动之间的通信(双向)

来自分类Dev

片段和非父活动之间的通信

来自分类Dev

android-为什么要在主要活动和片段之间进行通信时实现接口

来自分类Dev

片段到活动通信的Android最佳做法

来自分类Dev

Android服务与多个片段进行通信

来自分类Dev

Android服务与活动之间的通信

来自分类Dev

片段之间进行通信时会出现空指针异常,Android Studio无法识别片段ID,因为它需要ID类型的资源?

来自分类Dev

Android:在片段之间传递对象

来自分类Dev

Android在片段之间传递数据

来自分类Dev

片段之间的Android标签导航

来自分类Dev

片段之间的Android标签导航

来自分类Dev

在两个以上片段之间进行通信

来自分类Dev

如何使用接口在片段和活动之间进行通信?

来自分类Dev

在动态创建的片段之间通信,给出空指针异常

来自分类Dev

来自不同活动的两个片段之间的通信?

来自分类Dev

在同一活动中的片段之间进行通信

来自分类Dev

如何在警报对话框与片段之间进行通信?