手把手教你Acvtivity与Acvtivity间建立回调

2017-09-15  本文已影响0人  Augustine_

Activity虽然是一个java类,可是它并不能new 一个Activity

所以,Activity看上去并不是一个普通的类,它做一些事情的时候需要特殊处理

大家用的最多就是View与Activity之间的回调,非常好用

view可以直接获取到他的对象,所以建立回调关系也是十分容易的

究竟Activity与Activity之间能否建立回调关系呢?

答案是可以的,只是Activity需要跨出它的受限范围,思想走到更Activity更前面的一层

这里想到了使用Application

Application在一个进程中是唯一的,也是众多Activity的“爸爸”,“爸爸”当然可以管理关于儿子的一切

这里不画图了,看看代码,自己理清思路,最好能做到举一反三

比如现有这样一个情景,从个人主页跳转到登录界面,当登录结束后个人主页需要监听是否登录成功,并根据结果相应UI。

一般都会说,重写onResume()不就行了吗,或者startActivityForResule()处理一下就好了嘛。

这种方法当然可以,这里这样做,第一是举一个例子,第二是对比一下区别。

UserActivity(用户详情界面)

LoginActivity(登录界面)

IFun(定义的接口,ps,需要监听LoginActivity做哪些事情)

UserUtils(登录相关的工具类,这个工具类需要放在Application中全局共享,保证当前进程中所有Activity都可以访问的到)

前方高能

下面贴出代码

1.先定义接口

public interfaceIFun {

public voidlogin(String s);

public voidoutLogin(String s);

public voidregister(String s);

}

2.实现工具类

public classUserUtils {

privateIFuniFun;

publicUserUtils(){}

public voidsetiFun(IFun iFun) {

this.iFun= iFun;

}

public voidlogin(String s){

if(iFun==null)return;

iFun.login(s);

}

public voidoutLogin(String s){

if(iFun==null)return;

iFun.outLogin(s);

}

public voidregister(String s){

if(iFun==null)return;

iFun.register(s);

}

}

3.重写Application

public classBaseApplicationextendsApplication {

privateUserUtilsuserUtils;

@Override

public voidonCreate() {

super.onCreate();

userUtils=newUserUtils();

}

publicUserUtilsgetUserUtils() {

returnuserUtils;

}

}

4.编写UserInfoActivity

public classUserInfoActivityextendsActivityimplementsIFun {

TextViewtextView;

@Override

protected voidonCreate(@NullableBundle savedInstanceState) {

super.onCreate(savedInstanceState);

textView=newTextView(this);

textView.setBackgroundColor(Color.parseColor("#FFC0CB"));

textView.setGravity(Gravity.CENTER);

textView.setText("我是UserInfoActivity\n点击任意地方跳转");

textView.setOnClickListener(newView.OnClickListener() {

@Override

public voidonClick(View view) {

startActivity(newIntent(UserInfoActivity.this,LoginActivity.class));

}

});

setContentView(textView);

((BaseApplication)getApplication()).getUserUtils().setiFun(this);

}

@Override

public voidlogin(String s) {

textView.setText(s);

}

@Override

public voidoutLogin(String s) {

textView.setText(s);

}

@Override

public voidregister(String s) {

textView.setText(s);

}

}

5.编写LoginAvtivity

public classLoginActivityextendsActivityimplementsView.OnClickListener {

privateButtonloginBtn,outLoginBtn,registerBtn;

privateUserUtilsuserUtils;

@Override

protected voidonCreate(@NullableBundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.loging_activity);

loginBtn= findViewById(R.id.loginBtn);

outLoginBtn= findViewById(R.id.outLoginBtn);

registerBtn= findViewById(R.id.registerBtn);

loginBtn.setOnClickListener(this);

outLoginBtn.setOnClickListener(this);

registerBtn.setOnClickListener(this);

userUtils= ((BaseApplication)getApplication()).getUserUtils();

}

@Override

public voidonClick(View view) {

switch(view.getId()){

caseR.id.loginBtn:

userUtils.login("登录了");

break;

caseR.id.outLoginBtn:

userUtils.outLogin("退出登录了");

break;

caseR.id.registerBtn:

userUtils.register("我注册了");

break;

}

finish();

}

}

好了,到这里就大功告成了。

这个原理同样适用于Fragment中

一对多可以可以实现的

代码:http://download.csdn.net/download/qq_33445600/9980891

上一篇下一篇

猜你喜欢

热点阅读