(以下全部是以我写的一个点菜Dome为例子来进行说明)
一、 应用场景
这是一个点菜界面:
我们点击相对应的图片就可以进行点菜,我们点击第一张图片,跳转到肉菜的Activity里。
可以看到这里有两个菜,你可以做点介绍,这里就不过多赘述了,很简单的。这里可以点多少份相对应的菜,我点了10份红烧大肠和20份红烧肉。
这里你可以点击加号跟减号进行加减相对应的菜的份数,也可以直接输入自己想要的份数。
点击确定,我们就会返回点菜页面,在菜单的下面会显示你点的东西、份数和价格,当然了,这里只用了TestView构件的单行显示,可以尝试多行显示,不过这样就要复杂一点。
万法以简单的事情开始做会越做越简单。
以上就是数据回调的部分,接下来就是数据传输的过程了。
;我们点击结算,就会跳转到结算的Activity。
可以看到我们的账单已经给出来了,记得三连哦。
二、代码部分
如何实现数据的回调呢?
在几年前,谷歌就已经抛弃了startactivityforresult以及其一系列的函数了,当你编写代码时可以发现这个函数会被划掉,Activity之间也不会进行跳转和数据传输。但书上没说啊,你说气不气人。反正我挺无语的,百度吧,出来的都是使用Kotlin语言去编写的,又看不懂,偶尔有个一两篇是Java的,官网也可以查到,但不会用。有些博客就是将官网的翻译一下就直接放出来,离谱至极。
好了,现在来看代码:
//这个是第一个Activity的
//该方法要放在onCreate里面,不能放在监听器里
ActivityResultLauncher launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if(result.getResultCode() == Activity.RESULT_OK){
money1 = Integer.parseInt(result.getData().getStringExtra("m1")) * 10;
money2 = Integer.parseInt(result.getData().getStringExtra("m2")) * 20;
receivedDataTextView1.setText("红烧大肠" + " " +result.getData().getStringExtra("m1") + " " + money1);
Log.d("m1", result.getData().getStringExtra("m1"));
receivedDataTextView2.setText("红烧肉" + " " + result.getData().getStringExtra("m2") + " " + money2);
Log.d("m2", result.getData().getStringExtra("m2"));
}
}
});
img_meat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(orderActivity.this,meatActivity.class);
launcher.launch(intent);//启动intent跳转
// startActivity(intent);
}
});
//这个是第二个Activity的
Buttonaffirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent1 = new Intent(meatActivity.this, orderActivity.class);
intent1.putExtra("m1",Edit_value1.getText().toString());
intent1.putExtra("m2",Edit_value2.getText().toString());
setResult(RESULT_OK,intent1);
finish();
}
});
其实回调数据就是这么简单,不过是使用了新的函数registerForActivityResult()去实现罢了,总体跟过时的那个差不多。
数据传输还没有过时,网上一查一大堆
数据传输
全部代码在CSDN上:Dome
也可以直接在评论区留下邮箱