Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 创建意图时如何将接口传递给构造函数_Android_Android Intent - Fatal编程技术网

Android 创建意图时如何将接口传递给构造函数

Android 创建意图时如何将接口传递给构造函数,android,android-intent,Android,Android Intent,我有两个活动:Main活动启动NewMemberActivity。创建新提醒时,将通知第一个提醒。因此,它实现了接口OnEventAddedListener 我是否需要使用序列化将MainActivity添加到intent中,还是有更好的解决方案?我从未见过任何使用序列化来实现这一点的示例,我相信为了通信,从一个活动向另一个活动传递接口是非常常见的 public class MainActivity extends Activity implements OnEventAddedListener

我有两个活动:Main活动启动NewMemberActivity。创建新提醒时,将通知第一个提醒。因此,它实现了接口OnEventAddedListener

我是否需要使用序列化将MainActivity添加到intent中,还是有更好的解决方案?我从未见过任何使用序列化来实现这一点的示例,我相信为了通信,从一个活动向另一个活动传递接口是非常常见的

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)的建议。创建片段时,请提供一个捆绑包。正如那篇文章所建议的,连接到活动的现有片段。