技术标签: java接口回调的传值
前言
学习接口回调。
通过 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 实现了接口,那么它就是接口的一个实例,而这个实例重写了接口的方法,所以自然会获取到传递过来的值。
文章浏览阅读934次。今天给大家分享3个超丝滑Vue卡片左右、上下滑动层叠组件VueCardSlide。1、vue-tantan-stack一款基于 vue.js 制作的仿探探效果滑动组件。支持左右拖动或点击按钮切换效果。功能分析堆叠滑动的功能很简单,用一张图概括就是堆叠效果堆叠图片效果在网上有大量的实例,实现的方法大同小异,主要通过在父层设定 perspective 及 perspective-origin,来实现子..._android卡片层叠效果
文章浏览阅读1.5w次,点赞2次,收藏9次。很多手机都会自带一些Activity切换动画,项目中如果我们需要禁用掉系统Activity切换的动画,可以使用如下方法:一、重写Activity的Them中的windowAnimationStyle相关属性,并保存在res/values/styles.xml @style/notAnimation @null @null_activity 禁用启动动画
文章浏览阅读3.9w次,点赞118次,收藏267次。谈到DSP,几个“卷积”总是要弄清楚的。_圆周卷积
文章浏览阅读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查看历史输出
文章浏览阅读1k次,点赞19次,收藏28次。博主介绍:新人博主,工作经验两年+、专注于Java、小程序技术领域和毕业项目实战文末获取源码+数据库_基于微信小程序的酒店管理系统
文章浏览阅读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改写为一个多文件的程序
文章浏览阅读2.8k次。点击屏幕右侧的Maven Projects,点击Reimport All Maven Projects,重新导入即可转载于:https://www.cnblogs.com/mrnx2004/p/11313779.html_idea 把imi文件 无法启动项目了
文章浏览阅读1.1k次。AIOps 自从 Gartner 于2016年提出至今已有一段时间,虽然在顶级互联网及电信企业,已有较多落地,但至今仍无基于生产实践的理论体系及实施指南。AIOps,即 Artificial Intelligence for IT Operations,智能运维,将人工智能应用于运维领域,基于已有的运维数据(日志、监控信息、应用信息等),通过机器学习的方式来进一步解决自动化运维没办法解决的问题。从整个IT运维的发展,我们可以看到早期更多的是通过运维人员人工来完成,在人工阶段主要又做了两个方面的重要工作。_智能运维发展的基础
文章浏览阅读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让图片旋转
文章浏览阅读1.2k次。 在前两篇文章中,我们使用的虚拟设备软件是Yabe,模拟天气数据,无法自定义自己的点位数据,这章就学习下使用VTS来自己创建虚拟设备,创建定义点位。1.下载VTS 链接: https://pan.baidu.com/s/1ym_oAZ8QIA8KvVypU7TxXA 提取码: n82f..._bacnet4j
文章浏览阅读517次。Linux 学习技巧初学者可以自己安装虚拟机,然后把 Linux 常用命令例如 cd、ls、chmod、useradd、vi 等等多练习几十遍,把自己敲打命令的熟练程度提升上来。然后根据文档搭建 Linux 下常见的各种服务 (DHCP、 SAMBA、 DNS、Apache、Mysql 等) ,遇到问题后可以在 google 搜索,搜索的时候多看几篇文章,综合最好的文章来解决问题。能够熟练的搭建..._linux系统教程pdf
文章浏览阅读393次。Weblogic XMLDecoder 反序列化漏洞(CVE-2017-10271);Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。_cve-2017-10271