挺重要挺实用的知识点
首先来理解一下我实现的结果
比如我要选择一个类型,就得跳转到一个Activity
用监听回调是一个好到方法,但是,如果执行返回按钮销毁掉选择的页面,那么程序就崩溃了,用这个方法,就必须返回一个参数,所以。。。我就想到了listener
这篇文章解决了上述的一个问题,就是不一定非得带参数
跳转到第二个页面时可以不附加任何参数回退出来,并且保证程序的不崩溃
我这边描述一下现象,第一页跳转过去,在第二页选择触发事件,这个时候第二页的值就会传回第一页,第一页接收一下,就可以显示到控件上
此时此刻,第二页还在上层,你并不知道前面一页的数据已经充填了
这个时候就需要我们在第一页收到数据后,主动关闭显示在我们眼前的页面,听起来很复杂,其实十分有趣,这个模式可以解决不少问题,只是代码来回切,可能一时半会儿理解不了
首先建一个监听,我这个里面就搞了一个参数,有需求可以模仿的多加几个
public interface ProjectListener {
void projectName(String name);
}
我们按流程来,方便理解不容易出错
1.我们首先第一页点击跳转
直接跳转就行,可以不附加参数,当然,如果复用第二个页面的话,可以添加参数
intent.putExtra("admin_id", "11");//设置参数,""
Intent intent = new Intent();
intent.setClass(GirlAddActivity.this, ChooseProjectActivity.class);
GirlAddActivity.this.startActivity(intent);
2.第二个页面
定义全局接口对象, 当前接口对象为null
private static ProjectListener projectListener;
public static void setProjectListener(ProjectListener pl){
projectListener = pl;
}
然后就是添加数据
projectListener.projectName("举个例子");
3.这个时候我们就要在第一个页面添加接收数据的接口了
其中et_project就是一个Editview控件,就不赘述了
ChooseProjectActivity.setProjectListener(new ProjectListener() {
@Override
public void projectName(String name) {
et_project.setText(name);
}
});
进行到这里差不多就实现了回调,如果我们想在第一个收到数据的时候,关闭的选择页面怎么办呢
在第三点当中执行一下这个方法
/*
* 关闭选择页面
* */
private void finishChooseProject() {
if (ChooseProjectActivity.instance != null) {
ChooseProjectActivity.instance.finish();
}
}
第二页面,中要加一下,这样就可以
public static ChooseProjectActivity instance=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_choose_project);
instance = this;
}