activity返回传值封装,只需一个startActivityForRequest,不需写onActivityResult

正常界面A点击按钮a,跳转到界面B,
然后界面B点击按钮b,跳转到界面A,这时要求界面A打印出界面B返回的数据。
上面情景就是一个简单的activity返回传值业务。

常规写法就是:
1、在界面A的activity中调用一次startActivityForResult方法跳转到界面B。
2、在界面A的activity中还要复写一个onActivityResult方法,负责监听返回传值。
3、在界面B调用一次setResult方法负责返回传值。

本次封装的重点在于,将上面的1和2两步合并。将常规写法节约一步。
这样在编写需要返回传值的业务的时候就不需要,完成了第一步,还要找到onActivityResult方法,去编写监听。

下面开始上代码:
BaseActivity.java

public class BaseActivity extends AppCompatActivity {

	private ReturnActivityListener listener;
	
	public void startActivityForResult(Intent intent, int requestCode, ReturnActivityListener listener){
		super.startActivityForResult(intent,requestCode);
		this.listener = listener;
	}
	
	@Override
	protected void onActivityResult(int requestCode,int resultCode,Intent data){
		listener.onResult(requestCode,resultCode,data);
		super.onActivityResult(requestCode,resultCode,data);
	}
	
	public interface ReturnActivityListener{
		void onResult(int requestCode,int resultCode,Intent data);
	}
}

这样简单的基类就封装好了。具体使用在后面有代码,这里先解释一下上面的代码。
首先继承AppCompatActivity毫无疑问;
然后第一个方法startActivityForResult,这个方法相比“常规页面返回传值”的startActivityForResult方法,多了一个参数ReturnActivityListener,这个参数就是我们的返回监听了,在我们需要调用startActivityForResult的时候,类似做按钮控件监听一样,写一个匿名内部类,在里面编写返回监听的逻辑即可。
再然后第二个方法onActivityResult,这个方法就是调用一下接口ReturnActivityListener里面的onResult方法,这样就会执行上面编写匿名内部类里面的逻辑了。

上面讲的看不懂没关系额,下面上使用的代码,会使用了在研究也来得及。
1、编写两个Activity类,顺便写好他们的xml文件。每个xml文件里一个TextView控件,当按钮用。
2、界面A的核心代码:
YmczActivity1.java:

TextView t1 = findViewById(R.id.ymtz1_tv_btn1);
t1.setOnClickListener(new View.OnClickListener(){
	@Override
	public void onClick(View v){
		Intent i = new Intent();
		i.setClass(YmtzActivity1.this,YmtzActivity2.class);
		startActivityForResult(i,1000,new ReturnActivityListener(){
			@Override
			public void onResult(int requestCode,int resultCode,Intent data){
				if(requestCode == 1000&&resultCode==500){
					System.out.println("data.getStringExtra("fanhuizhi"));
				}
			}
		});
	}
});

这里可以看到就是将原来写在onAcitityResult里面的代码,放进这里面了,这样就不需要再去复写onAcitityResult这个方法了。

接下来是界面B的核心代码:
YmtzActivity2.java:

TextView t1 = findViewById(R.id.ymtz2_tv_btn1);
t1.setOnClickListener(new View.OnClickListener(){
	@Override
	public void onClick(View v){
		Intent i = new Intent();
		i.putExtra("fanhuizhi","我返回了");
		setResult(500,i);
		finish();
	}
});

这个就是正常写法,也就是最开始说的“常规写法”的第3步,没有改变。

这个时候运行项目,发现效果和“常规写法”效果相同,但是少写了一个返回监听。而且在编写页面跳转的时候就直接编写监听,思路比较清晰,方便后期阅读。

ps:本文代码纯文本手敲,可能有地方直接粘贴复制到编译器会飘红,看官留心。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值