Java 如何将对象从片段传递到活动-Android

Java 如何将对象从片段传递到活动-Android,java,android,Java,Android,编辑:我不是试图将数据从片段传递到它的容器活动。我试图将数据从片段传递到另一个活动。而且,我的帖子不是关于我所犯的错误;我只是把它放在那里作为参考。我在这篇文章中唯一的一个问题是,有人能告诉我接口的实现是否正确吗 我无法将对象从主活动中的片段传递到其他活动。我正在使用一个接口尝试在片段和活动之间传递对象 我的应用程序是一个通过谷歌地图及其标记显示校园事件的应用程序。谷歌地图是在片段内部实现的 当用户单击一个标记时,一个事件对象应该被传递给一个活动,并且会弹出一个屏幕,显示传递的事件对象的详细信息

编辑:我不是试图将数据从片段传递到它的容器活动。我试图将数据从片段传递到另一个活动。而且,我的帖子不是关于我所犯的错误;我只是把它放在那里作为参考。我在这篇文章中唯一的一个问题是,有人能告诉我接口的实现是否正确吗

我无法将对象从主活动中的片段传递到其他活动。我正在使用一个接口尝试在片段和活动之间传递对象

我的应用程序是一个通过谷歌地图及其标记显示校园事件的应用程序。谷歌地图是在片段内部实现的

当用户单击一个标记时,一个事件对象应该被传递给一个活动,并且会弹出一个屏幕,显示传递的事件对象的详细信息

下面是NowMapFragment类片段中的接口,当有人按下一个标记时,它与Google地图和onMarkerClick事件有关

private GoogleMap mMap;
private OnFragmentInteractionListener mListener;
ArrayList<Event> events = Event.getEvents();

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);

    try {
        mListener = (OnFragmentInteractionListener) activity;
    }
    catch (Exception e) {

    }
}

@Override
public boolean onMarkerClick(Marker marker) {
    Intent intent = new Intent();

    for(Event event : events) {
        if(marker.getTitle().equals(event.getName())) {
            mListener.setEvent(event);
        }
    }

    intent = new Intent(getActivity(), EventDetails.class);
    startActivity(intent);

    return true;
}

public interface OnFragmentInteractionListener {
    // TODO: Update argument type and name
    void onFragmentInteraction(Uri uri);
    void setEvent(Event event);
}
我觉得我只是误解了如何实现接口,并且实现了错误的接口

另外,我的确切错误是:

java.lang.NullPointerException:尝试调用虚拟方法 空对象上的“java.lang.String com.group4.group4.Event.getName” 参考文献

有人能告诉我接口的实现是否正确吗

附加到同一活动的片段你可以试试这个

您可以使用setArguments和getArguments,如下所示

在片段中使用setArguments

活跃

使用getArguments


发生错误的原因是您正在活动的onCreate方法中调用event.getName

您应该了解活动的生命周期。 您的globale属性事件未在onCreate上初始化

您应该使用

intent = new Intent(getActivity(), EventDetails.class);
intent.putExtra("event", event);
startActivity(intent);
在活动中调用onCreate


注意:你的类事件应该实现可序列化的接口来实现这一点

你介意向你的类事件展示你真正想要做的事情吗。。。您是否尝试将数据从片段添加到新活动中,或在片段存在的同一活动中,如果您尝试在同一活动中执行此操作,则无论何时将片段添加到活动中,您都必须调用片段侦听器,而不是在oncreate中,因为每次活动打开时,您的事件都将在第一时间为null,并且它将为空show nullpointerPls引用了这个答案,我以前做过,因为某种原因它不起作用,这就是为什么我尝试使用一个接口。因为我试图重新实现你的解决方案,android studio一直说它无法解决SetArguments。抱歉,我混淆了一些东西。我编辑了我的答案:那不是我想要的。我试图将数据传递给另一个活动;它是一个可序列化的对象。它还能工作吗?是的,您可以像这样使用bundle.putobject、mContext.getdata
((YourActivity)getActivity()).getYourObjects();
Bundle bundle = new Bundle();
bundle.putString("event", event);
intent = new Intent(getActivity(), EventDetails.class);
intent.setArguments(bundle)
startActivity(intent);
Event event = getArguments().get("event");
intent = new Intent(getActivity(), EventDetails.class);
intent.putExtra("event", event);
startActivity(intent);
Event event = (Event) getIntent().getSerializableExtra("event");