手把手教你Acvtivity與Acvtivity間建立回調

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容