java接口回调的传值_通过 Fragment 向 Activity 传值,记住接口回调用法-程序员宅基地

技术标签: java接口回调的传值  

21d65d25da0d43c5b446fa40489d8963.png

前言

学习接口回调。

通过 Fragment 向其所属 Activity 传值,利用接口回调方式,学习理解接口回调。

实现过程

新建工程,在 MainActivity 中初始化一个 TextView 来显示通过静态方式添加的 Fragment 中传递过来的值;Fragment 中需要一个 EditText 和一个 Button 即可。

MainActivity.java

public class MainActivity extends AppCompatActivity implements CallBack{

private TextView tvMain;

@Override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tvMain = (TextView) findViewById(R.id.tv_main);

}

@Override

public void putStringValue(String content){

tvMain.setText(content);

}

}

说明:通过实现接口,在接口中直接给 TextView 赋值即可。

activity_main.xml

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/tv_main"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:textSize="15sp" />

android:id="@+id/fr_blank"

android:name="com.codexiaosheng.interfacedemo.fragment.BlankFragment"

android:layout_width="match_parent"

android:layout_marginTop="15dp"

android:layout_height="match_parent" />

说明:线性布局上面的 TextView 用来展示 fragment 传递过来的值,下面直接引入 BlankFragment,需要注意的是这里引入方式是通过其 name 属性,而且必须指定 id ,否则运行会报错。

BlankFragment.java

public class BlankFragment extends Fragment{

private EditText etInput;

private Button btnTranslateValue;

private CallBack callBack;

public BlankFragment(){

}

@Override

public void onCreate(@Nullable Bundle savedInstanceState){

super.onCreate(savedInstanceState);

callBack = (CallBack) getActivity();

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState){

View frView = inflater.inflate(R.layout.fragment_blank, container, false);

etInput = (EditText) frView.findViewById(R.id.et_fr);

btnTranslateValue = (Button) frView.findViewById(R.id.btn_fr);

return frView;

}

@Override

public void onActivityCreated(@Nullable Bundle savedInstanceState){

super.onActivityCreated(savedInstanceState);

btnTranslateValue.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v){

String content = etInput.getText().toString().trim();

if (null != content && !"".equals(content)) {

callBack.putStringValue(content);

} else {

Snackbar.make(btnTranslateValue, "请输入值", Snackbar.LENGTH_SHORT).show();

}

}

});

}

}

说明:在 onCreate 初始化接口对象,在其所属的 Activity 绘制完成时设置监听,通过调用接口方法将值传递给实现了接口的实例,也就是这里的 MainActivity;如果没有输入值的时候,给出了一个 Snack .

fragment_blank.xml

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/et_fr"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:background="@null"

android:hint="传值到 Activity"

android:textSize="15sp" />

android:id="@+id/btn_fr"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:layout_marginTop="25dp"

android:padding="5dp"

android:text="传值到activity"

android:textSize="15sp" />

说明:很简单,一个输入框用来输入要传递的值,按钮用来响应传递事件。

CallBack.java

public interface CallBack {

void putStringValue(String content);

}

说明:用来传值的接口。

总结

接口回调在实际开发中使用很频繁,但是很多初学者无法理解,原因是因为没有理解 Java 中的多态。比如针对上面的运用可以提问:为什么在 fragment 里面调用接口的方法那就能传递到 MainActivity 呢?

答案很简单,从接口的初始化就可以看出来,接口的设计,就是为多态的应用而生,因为这里 MainActivity 实现了接口,那么它就是接口的一个实例,而这个实例重写了接口的方法,所以自然会获取到传递过来的值。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42360977/article/details/114864752

智能推荐

android卡片层叠效果_3个超秀的 Vue 卡片翻动组件Vue-Card-Slide-程序员宅基地

文章浏览阅读934次。今天给大家分享3个超丝滑Vue卡片左右、上下滑动层叠组件VueCardSlide。1、vue-tantan-stack一款基于 vue.js 制作的仿探探效果滑动组件。支持左右拖动或点击按钮切换效果。功能分析堆叠滑动的功能很简单,用一张图概括就是堆叠效果堆叠图片效果在网上有大量的实例,实现的方法大同小异,主要通过在父层设定 perspective 及 perspective-origin,来实现子..._android卡片层叠效果

去掉activity默认动画效果的方法_activity 禁用启动动画-程序员宅基地

文章浏览阅读1.5w次,点赞2次,收藏9次。很多手机都会自带一些Activity切换动画,项目中如果我们需要禁用掉系统Activity切换的动画,可以使用如下方法:一、重写Activity的Them中的windowAnimationStyle相关属性,并保存在res/values/styles.xml @style/notAnimation @null @null_activity 禁用启动动画

线性卷积、周期卷积、圆周卷积------一篇弄懂-程序员宅基地

文章浏览阅读3.9w次,点赞118次,收藏267次。谈到DSP,几个“卷积”总是要弄清楚的。_圆周卷积

screen显示窗口查看历史输出_screen查看历史输出-程序员宅基地

文章浏览阅读1.5w次,点赞15次,收藏34次。在screen当前显示的视窗下,当输出信息很多时,想直接利用鼠标或者方向键查看历史输出的话,会发现不行。方法先利用ctrl-a [ 进入copy mode。在copy mode下可以回滚、搜索、复制就像用使用 vi 一样。在copy mode下有这些快捷键:C-b :Backward、PageUpC-f :Forward、PageDownH: High,将光标移至左上角L:L..._screen查看历史输出

基于微信小程序的酒店管理系统的设计与开发(源码+lw+部署文档+讲解等)-程序员宅基地

文章浏览阅读1k次,点赞19次,收藏28次。博主介绍:新人博主,工作经验两年+、专注于Java、小程序技术领域和毕业项目实战文末获取源码+数据库_基于微信小程序的酒店管理系统

5,将本章的例2.4改写为一个多文件的程序: (1)将类定义放在头文件arraymax.h中; (2)将成员函数定义放在源文件arraymax.cpp中; (3)主函数放在源文件filel.cpp中。-程序员宅基地

文章浏览阅读8k次。Arraymax.h#include class Array_max{public:void set_value();void max_value();void show_value();private:int array[10];int max;};Arraymax.cpp#include#include"arraymax.h"using namespace std;void Array_max_将本章的例2.4改写为一个多文件的程序

随便推点

当idea的maven项目没有.iml文件导致打开失败时-程序员宅基地

文章浏览阅读2.8k次。点击屏幕右侧的Maven Projects,点击Reimport All Maven Projects,重新导入即可转载于:https://www.cnblogs.com/mrnx2004/p/11313779.html_idea 把imi文件 无法启动项目了

对AIOps智能化运维的基础理解_智能运维发展的基础-程序员宅基地

文章浏览阅读1.1k次。AIOps 自从 Gartner 于2016年提出至今已有一段时间,虽然在顶级互联网及电信企业,已有较多落地,但至今仍无基于生产实践的理论体系及实施指南。AIOps,即 Artificial Intelligence for IT Operations,智能运维,将人工智能应用于运维领域,基于已有的运维数据(日志、监控信息、应用信息等),通过机器学习的方式来进一步解决自动化运维没办法解决的问题。从整个IT运维的发展,我们可以看到早期更多的是通过运维人员人工来完成,在人工阶段主要又做了两个方面的重要工作。_智能运维发展的基础

Auto.js 旋转图标_安卓 autojs让图片旋转-程序员宅基地

文章浏览阅读471次。"ui";importClass(android.animation.ObjectAnimator);ui.layout( <vertical> <img id="图片"src="@drawable/ic_loop_black_48dp" h="80" margin="12" bg="?selectableItemBackgroundBorderless"/> </vertical>);ui.图片.click(() => ._安卓 autojs让图片旋转

BACnet/IP之BACnet4j学习VTS创建虚拟设备及点位测试-程序员宅基地

文章浏览阅读1.2k次。 在前两篇文章中,我们使用的虚拟设备软件是Yabe,模拟天气数据,无法自定义自己的点位数据,这章就学习下使用VTS来自己创建虚拟设备,创建定义点位。1.下载VTS 链接: https://pan.baidu.com/s/1ym_oAZ8QIA8KvVypU7TxXA 提取码: n82f..._bacnet4j

linux系统管理教程pdf,Linux运维入门到高级全套系列PDF-程序员宅基地

文章浏览阅读517次。Linux 学习技巧初学者可以自己安装虚拟机,然后把 Linux 常用命令例如 cd、ls、chmod、useradd、vi 等等多练习几十遍,把自己敲打命令的熟练程度提升上来。然后根据文档搭建 Linux 下常见的各种服务 (DHCP、 SAMBA、 DNS、Apache、Mysql 等) ,遇到问题后可以在 google 搜索,搜索的时候多看几篇文章,综合最好的文章来解决问题。能够熟练的搭建..._linux系统教程pdf

【网络安全---漏洞复现】Weblogic XMLDecoder 反序列化漏洞(CVE-2017-10271)-程序员宅基地

文章浏览阅读393次。Weblogic XMLDecoder 反序列化漏洞(CVE-2017-10271);​Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。_cve-2017-10271

推荐文章

热门文章

相关标签