Android 创建意图时如何将接口传递给构造函数
我有两个活动:Main活动启动NewMemberActivity。创建新提醒时,将通知第一个提醒。因此,它实现了接口OnEventAddedListener 我是否需要使用序列化将MainActivity添加到intent中,还是有更好的解决方案?我从未见过任何使用序列化来实现这一点的示例,我相信为了通信,从一个活动向另一个活动传递接口是非常常见的Android 创建意图时如何将接口传递给构造函数,android,android-intent,Android,Android Intent,我有两个活动:Main活动启动NewMemberActivity。创建新提醒时,将通知第一个提醒。因此,它实现了接口OnEventAddedListener 我是否需要使用序列化将MainActivity添加到intent中,还是有更好的解决方案?我从未见过任何使用序列化来实现这一点的示例,我相信为了通信,从一个活动向另一个活动传递接口是非常常见的 public class MainActivity extends Activity implements OnEventAddedListener
public class MainActivity extends Activity implements OnEventAddedListener {
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
if(item.getItemId() == R.id.action_addReminder)
{
// NewReminderActivity c = new NewReminderActivity(this);
// Intent intent = new Intent(this, c.getClass()); // this won't work
Intent intent = new Intent(this, NewReminderActivity.class);
startActivity(intent);
return true;
} else {
return super.onOptionsItemSelected(item);
}
}
}
您绝对不应该尝试将一个活动传递给另一个活动,无论是通过序列化它(由于许多原因,它甚至不起作用)还是设置引用 Android将负责清理内存中的旧活动,但只要您保留其中的引用,就无法这样做。永远不要在他们的上下文之外保留其他活动或片段
您应该使用
startActivityForResult()
遵循上的文档,并通过onActivityResult(int,int,Intent)
提供该活动的结果,谢谢,这对我来说很有效。我只是想澄清一下:我是否只应该在活动片段通信中使用回调?不一定,您还可以使用其他选项。从片段中,您可以使用getActivity()
获取活动(如果它附加到一个片段上)。如果知道该类型,可以将其强制转换为期望的类型,并对其调用方法。反之亦然,你应该非常小心;通常,您会在尝试查找特定片段时查询FragmentManager。无论您做什么,在这些情况下都不要保留引用,因为这样会阻止GC清理这些对象。根据这一点:我应该使用回调进行通信。任何关于何时通过意图在活动之间使用什么(activityactivity,activityfragment)的建议。创建片段时,请提供一个捆绑包。正如那篇文章所建议的,连接到活动的现有片段。