Android入门笔记(二)Activity的简单入门

302 阅读2分钟

最近开始学Android了,由于是在B站上看的视频教程,以后有东西忘了再学起来很麻烦,因此打算先把学到的一些东西写下来,将来再查起来应该就会方便点了。

Activity的基本用法

非常简单,也就三步

  1. 在 AndroidStudio 默认已经创建了一个activity_main.xmlMainAcitivity.java的前提下,右击MainAcitivity.java所在文件夹,按 New→Activity→Empty Activity 新建一个Activity,名字不清楚能不能随便起,总之带一个Activity结尾总没有错,稍等片刻便可以看到多出了一个java文件和与之对应的xml文件

    新建Activity

  2. MainActivity.java里添加相应代码调用新建的activity,很简单,就两行。

    Intent intent=new Intent(MainActivity.this,MyActivity.class);
    startActivity(intent);  
    

    其中 Intent 的两个参数,第一个是上下文对象,第二个是要调用的activity加上 .class。下图为例,当点击按钮后就会调用新的activity

  3. 调用了一个activity后,如果想要关闭当前 activity ,就要用到finish()。这里是当我点击按钮后就会关闭当前activity

    finish()

效果:

效果


利用bundle传输数据

这个就稍微复杂点了

  1. 首先是发起调用的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方法可以选,要随机应变

  2. 被调用的activity得获取到数据,下面是以string为例

    Intent intent=getIntent();
    Bundle bundle=intent.getExtras();
    String site1=bundle.getString("省份");
    String site2=bundle.getString("城市");
    

    这样就取得数据了,然后该干嘛干嘛

以获取输入的地址为例

结果

调用一个Activity并返回数据

这个就更复杂点了

  1. 调用其他 aitivity,代码如下

    Intent intent =new Intent(MainActivity.this,HeadActivity.class);
    startActivityForResult(intent,0x11);
    

    第二行多了个参数 0x11 ,这个参数是 requestCode,需要是一个十六进制整数,大概可以任意设置

  2. 被调用的 actvity 返回数据,代码如下

    Intent intent=getIntent();
    Bundle bundle=new Bundle();
    bundle.putXXX(key,value);
    intent.putExtras(bundle);
    setResult(0x11,intent);
    finish();
    

    还是利用bundle传送数据,第五行的setResult() 的第一个参数是 resultCode

  3. 回到一开始的 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 的用处。