关于Android中如何将信息从片段(Fragment)传输到活动(Activity)的故事。 该信息对于初学者(初级),精通Android编程将非常有用,而对于中老年人来说则不太可能会有用。
启动IDE(集成开发环境)
Android Studio 。 创建一个新项目:File-> New-> New Project。 选择“清空活动”,然后单击“下一步”。

填写“名称”,“包裹名称”,“保存位置”字段。

IDE将自动创建两个文件:“ java / [程序包名称]”目录中的“ MainActivity.java”和“ res / layout”目录中的“ activity_main.xml”。


Java文件确定应用程序的
工作方式 ,即xml-它的
外观 。 到目前为止,它仅执行“ setContentView(R.layout.activity_main);”操作,非常少。 此行告诉应用程序在启动时使用activity_main.xml布局。 并且,由于布局仅包含一个带有文本“ Hello World!”的“ TextView”类型的小部件,因此我们的应用程序看起来也非常适中。

在项目文件夹中,创建一个名称为“ Fragment1”的片段。


IDE将创建两个文件:“ Fragment1”和“ fragment_fragment1.xml”。


打开片段布局文件,并在欢迎行中删除我们不需要的“ TextView”小部件。

切换到设计模式,然后将(按钮)按钮拖到布局上。

IDE将创建一个标识符为“ button1”的按钮。

现在,编辑主要活动的布局,即 文件“ activity_main.xml”

将文本小部件移到更高位置,然后将我们创建的片段添加到布局中(为此,将“ <>”元素拖动到布局上,选择“ Fragment1”,然后单击“确定”)。

在片段设置的活动布局中,设置layout_height =“ wrap_content”,然后根据自己的喜好编辑其位置。 我们还将文本字段的标识符更改为“ textReport”,并将片段更改为“ fragmentWithButton”。

运行模拟器(Shift + F10),然后查看发生了什么。

该应用程序显示题词“ Hello World!”。 和按钮。 铭文来自
活动 ,按钮属于一个
片段 。 按下了按钮,但到目前为止没有任何作用。 让我们尝试对题词进行编程,以显示按钮按下的次数。 为此,我们需要
发送一条有关片段到活动的按钮单击的消息 。
首先,我们将讲解片段以计算按钮单击的次数。 打开文件“ Fragment1.java”。

添加变量“ counter”。 在创建片段后立即调用的“ onCreateView”方法中,创建“侦听器”按钮。 IDE将要求实现View.OnClickListener-同意(Alt + Enter)。 让我们创建(定义)onClick方法,该方法每次单击按钮都会增加“ counter”变量的值,并显示一条弹出消息。

让我们检查一下模拟器(再次按Shift + F10)。 按下按钮将在应用程序屏幕的底部显示弹出消息“按钮的单击数:...”。

太好了,继续前进。 我们的主要目标是将信息(在这种情况下为单击按钮的次数)从片段实例传输到活动实例。
activities ,
活动和
片段的生命周期
是有组织的,因此Android(几乎)不允许活动和片段直接进行通信,因此我们需要一个中介接口。 我们称他为“邮递员”(postman)。 该接口既可以在单独的文件中创建,也可以在带有片段代码的文件中创建; 我们将选择第一个选项。 我们的Postman界面将包含“ fragmentMail”的单个抽象方法(无“ body”)。

我们将使用变量“ numberOfClicks”作为“信封”将消息从片段传输到活动。
使用活动代码“ MainActivity.java”打开文件。 我们记得,它看起来像这样:

我们实现了Postman接口,并向该活动添加fragmentMail接口方法,并对其进行了重新定义(
Override )。

现在,只要活动在变量“ numberOfClicks”中“看到”新值,它将在textReport文本字段中显示更新的消息。
但是我们仍然需要“把信放进信封”,即 将按钮的点击次数传递给变量。 我们在片段代码中执行此操作。 打开文件“ Fragment1.java”。
D̶o̶b̶a̶v̶l̶ya̶e̶m̶̶v̶̶p̶o̶d̶p̶i̶s̶̶̶k̶l̶a̶s̶s̶a̶̶i̶m̶p̶l̶e̶m̶e̶n̶t̶a̶ts̶i̶yu̶̶i̶n̶t̶e̶r̶f̶e̶y̶s̶a̶̶«邮递员»。IDE̶p̶o̶t̶r̶e̶b̶u̶e̶t̶̶p̶e̶r̶e̶o̶p̶r̶e̶d̶e̶l̶i̶t̶̶梅托德̶i̶n̶t̶e̶r̶f̶e̶y̶s̶a̶̶«̶f̶r̶a̶g̶m̶e̶n̶t̶M̶a̶i̶l̶»̶,̶没有̶d̶e̶l̶a̶t̶̶̶v̶NOM我NICHEGO NE̶b̶u̶d̶e̶m̶,̶̶p̶o̶e̶t̶o̶m̶u̶̶o̶s̶t̶a̶v̶i̶m̶自我TELO̶p̶u̶s̶t̶y̶m̶。
[已删除,请参阅“ 2019年4月20日的注释1”]我们将需要一个指向活动实例的链接。 当片段附加到这样的活动时,我们将获得它:

在“ onClick”方法(单击片段的按钮时调用的方法相同)中,我们从活动实例向接口添加调用。

删除(为了简洁)注释后,片段的最终代码如下所示:

现在我们的
片段计算按钮单击的次数 ,将其显示在弹出消息中,然后使用Postman界面
将计数器变量的值传输到变量numberOfClicks ,该
变量充当信封容器,用于从片段发送消息到活动。 收到新消息的活动立即将其显示在其小部件文本字段中,并带有标识符“ textReport”。 目标实现了!

PS:将编程语言从Java更改为Kotlin可以大大减少代码片段:

PPS:在此处下载项目文件:
Java ,
Kotlin 。
从04/20/2019的注释1:
Postman接口的实现已从片段代码中删除。
片段通过已经在其中实现该接口的活动来与该接口一起工作。
感谢
mikaakim 发表评论 。
可以从上面链接的github下载更新的文件。