美文网首页
手把手教你Acvtivity与Acvtivity间建立回调

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

作者: Augustine_ | 来源:发表于2017-09-15 17:00 被阅读0次

    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

    相关文章

      网友评论

          本文标题:手把手教你Acvtivity与Acvtivity间建立回调

          本文链接:https://www.haomeiwen.com/subject/bzfesxtx.html