最近开始学Android了,由于是在B站上看的视频教程,以后有东西忘了再学起来很麻烦,因此打算先把学到的一些东西写下来,将来再查起来应该就会方便点了。
Activity的基本用法
非常简单,也就三步
-
在 AndroidStudio 默认已经创建了一个
activity_main.xml和MainAcitivity.java的前提下,右击MainAcitivity.java所在文件夹,按 New→Activity→Empty Activity 新建一个Activity,名字不清楚能不能随便起,总之带一个Activity结尾总没有错,稍等片刻便可以看到多出了一个java文件和与之对应的xml文件 -
在
MainActivity.java里添加相应代码调用新建的activity,很简单,就两行。Intent intent=new Intent(MainActivity.this,MyActivity.class); startActivity(intent);其中 Intent 的两个参数,第一个是上下文对象,第二个是要调用的activity加上
.class。下图为例,当点击按钮后就会调用新的activity -
调用了一个activity后,如果想要关闭当前 activity ,就要用到
finish()。这里是当我点击按钮后就会关闭当前activity
效果:
利用bundle传输数据
这个就稍微复杂点了
-
首先是发起调用的activity需要发送数据,这就要用到bundle,代码如下
Intent intent=new Intent(MainActivity.this,MyActivity.class); Bundle bundle=new Bundle(); bundle.putXXX(key,value); intent.putExtras(bundle); startActivity(intent);第三行是将数据放入bundle中,都是键值对的形式,有好多put方法可以选,要随机应变
-
被调用的activity得获取到数据,下面是以string为例
Intent intent=getIntent(); Bundle bundle=intent.getExtras(); String site1=bundle.getString("省份"); String site2=bundle.getString("城市");这样就取得数据了,然后该干嘛干嘛
以获取输入的地址为例
结果
调用一个Activity并返回数据
这个就更复杂点了
-
调用其他 aitivity,代码如下
Intent intent =new Intent(MainActivity.this,HeadActivity.class); startActivityForResult(intent,0x11);第二行多了个参数 0x11 ,这个参数是 requestCode,需要是一个十六进制整数,大概可以任意设置
-
被调用的 actvity 返回数据,代码如下
Intent intent=getIntent(); Bundle bundle=new Bundle(); bundle.putXXX(key,value); intent.putExtras(bundle); setResult(0x11,intent); finish();还是利用bundle传送数据,第五行的
setResult()的第一个参数是 resultCode -
回到一开始的 activity ,需要获取返回的数据,代码如下
@Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==0x11 && resultCode==0x11){ Bundle bundle=data.getExtras(); int imgid=bundle.getInt("img"); ImageView imgv=findViewById(R.id.imgv1); imgv.setImageResource(imgid); } }这个例子里是返回了一个图片所以是 getInt ,相应的 get 函数还有好几种,要随机应变,get 函数的参数是之前放入的 bundle 的键值对中的键,获取到的自然就是值了。
onActivityResult 是自动生成的,右键菜单中选择 generate→Override Methods→onActivityResult 。
if 函数就体现出了 requestCode 和 resultCode 的用处。