Android-页面间数据回调方式StartActivityFo
2020-03-26 本文已影响0人
晴天ccc
业务场景:
- 例如我们从控制器A跳转到B执行各种业务,执行完毕之后将完成的数据一并带上返回到A并进行处理。
解决方案
- 接口回调
StartActivityForResult- EventBus
- 广播
- Key-Value
StartActivityForResult
需要三个关键方法:startActivityForResult,setResult,onActivityResult。
1、startActivityForResult控制器A跳转到B的时候使用,附带上独特的请求码。
// Intent对象
// requestCode 请求码
startActivityForResult(Intent intent, int requestCode);
2、setResult控制器B/C等返回A时候使用,把回调数据带入其中。
// resultCode 回调码
// Intent 带返回数据的Intent对象
setResult(int resultCode, Intent data)
3、onActivityResult控制器A中使用,接受从B/C等返回的数据并做业务区分。
// requestCode 请求码
// resultCode 回调码
// Intent 带返回数据的Intent对象
onActivityResult(int requestCode, int resultCode, Intent data)
下面是具体代码使用案例:
public class AActivity extends AppCompatActivity {
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 1:
//来自resultCode==1的请求,作相应业务处理
String resultData = data.getExtras().getString("b_data");
case 2:
//来自resultCode==2的请求,作相应业务处理
}
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView oneBtn = findViewById(R.id.oneBtn);
oneBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// resultCode可以根据业务需求自己编号
Intent intent = new Intent(AActivity.this, BActivity.class);
startActivityForResult(intent, 1);
}
});
}
}
public class BActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView twoBtn = findViewById(R.id.twoBtn);
twoBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
//把需要返回的数据存放在Intent
intent.putExtra("b_data", "这是B控制器的回调数据!");
setResult(1, intent);
finish();
}
});
}
}
接口回调
在B控制器定义一个接口对象,并在需要回调的时候执行,用法类似iOS的Block。
// 定义一个接口
private OnItemClickListener onClickListener;
public interface OnItemClickListener {
void onItemClick(String keyStr);
}
public void setOnClickListener(OnItemClickListener onClickListener) {
this.onClickListener = onClickListener;
}
onClickListener.onItemClick("hello world");