Android四大组件之Activity篇(一)(Activity的创建、开启和数据传递)

合抱之木,生于毫末;百丈之台,起于垒土;千里之行,始于足下。-----《老子》

        大家好,经过前面几个小节的总结,相信大家对Android已经有了一个初步的了解,那么从今天开始,我将陆续归纳总结一下Android中比较重要的一个知识点,那就是Android的四大组件的相关内容。此部分内容十分重要,有很多细节值得注意。根据自己平日的学习,还有找工作和工作的经历,我会尽可能将自己知道的,自己觉得应该提到的相关知识点进行归纳总结,但是由于自己也是新手,学习Android时间不长,还属于菜鸟级的,所以其中有什么不妥、错误、或者比较重要的知识点没有提到的,欢迎大家多多吐槽……(废话不多说,走起……)

1Activity的创建:

      第一步:新建一个继承Activity的类,如:NewActivity

              public class NewActivity extends Activity {
                      @Override
                      protected void onCreate(Bundle savedInstanceState) {
                             super.onCreate(savedInstanceState);
                             //这里可以使用setContentView(R.layout.xxx)显示某个视图....
                      }
              }

      第二步:需要在功能清单AndroidManifest.xml文件中添加进上面Activity配置代码(红色部分)

                       <manifest xmlns:android="http://schemas.android.com/apk/res/android"
                                   package="cn.action"
                                   android:versionCode="1"
                                   android:versionName="1.0">
                                   <application android:icon="@drawable/icon" android:label="@string/app_name">
                                              .....
                                             <activity android:name=".NewActivity" android:label="新activity的页面标题"/>
                                   </application>
                                   ...
                    </manifest>

         android:name属性值的前面加了一个点表示NewActivity是当前包cn.action下的类,如果类在应用的当前包下,可以省略点符号,如果类在应用的子包下必须加点,如:NewActivity类在cn.action.user包下可以这样写:<activity android:name=.user.NewActivity />  

2Activity的开启(显示意图和隐式意图)与关闭:finish()方法完成

        1)、显示意图开启方式:

                 指定一个类启动Activity,通常用在应用程序内部界面跳转

           Intent intent = new Intent();                                                       //创建意图对象
           intent.setClass(this, otherActivity.class)                                          //构造函数,代码少
           // intent.setClassName(this."com.itheima.activity.OtherActivity");                  //类名形式,灵活,可扩展性强
           // intent.setClassName("com.itheima.activity","com.itheima.activity.MainActivity"); //包名类名形式,可启动其他程序中的Activity
         startActivity(intent);                                                              //打开Activity

       (2)、隐式意图开启方式:

                    显示意图是指在创建意图时指定了组件,而隐式意图则不指定组件,通过动作、类型、数据匹配对应的组件。

                    ***  在清单文件中定义<activity>时需要定义<intent-filter>才能被隐式意图启动。

                    ***  <intent-filter>中至少配置一个<action>和一个<category>,否则无法被启动。

                    *** Intent对象中设置的actioncategorydata<intent-filter>必须全部包含才能启动。

                    ***  <intent-filter>中的<action><category><data>都可以配置多个,Intent对象中不用全部匹配,每样匹配一个即可启动。

                    *** 如果一个意图要匹配多个ActivityAndroid系统会提示选择。

                    通过动作和数据找到一个匹配的Activity,不和某个类绑定,通常用在多个应用之间跳转

     例如:

         Intent intent = new Intent();
        intent.setAction(“android.intent.action.CALL”);
        intent.setData(Uri.parse(“tel:132888888888”));
        startActivity(intent);

        相对于以上的隐式意图,对应的Activity的配置文件如下:

      <activity android:name = “.OtherActivity”                             //这里是标识是哪个Activity
               Android:label = “OtherActivity”>                             //这里是标识显示在Activity上的标题
                 <intent-filter>
                    <action android:name = “android.intent.action.CALL”/>
                    <category android:name = “android.intent.category.DEFAULT”/>
                    <data android:scheme=”/tel”/>
               </intent-fileter>
      </activity>

3Activity的数据传递相关:

      (1)、开启一个Activity时发送数据过去:

                     a、传递基本数据类型:

                               传数据:

                                        intent.putExtra(key , value);

                               取数据:

                                      intent.getStringExtra(“”);

                                       intent.getIntExtra(“”,-1);        //获取数据,如果获取的数据不存在,值就是-1.

                     b、传递一个对象(必须序列化):

                               传数据:

                                      intent.putExtra(“p”, new Person(“李四”,21));

                               取数据:

                                      Person p  = (Person) intent.getSerializableExtra”p”;

                                     String name = p.getName();

                                      int age = p.getAge();

                     c、当想传递一组数据,但是不是一个对象的时候,还可以用以下的方法来完成:

                               传数据:

                                      Bundle b1 = new Bundle();

                                      b1.putString(“name”,”李四”);

                                      b1.putInt(“age”,20);

                                      intent.putExtra(“b1”,b1);

                               取数据:

                                      Bundle b1 = intent.getBundleExtra(“b1”);

                                      String name = b1.getString(“name”);

                                       int age = b1.getInt(“age”);

    (2)、关闭一个Activity时传回数据:

                 注意:当要接收传回来的数据的时候,开启Activity就不能用startActivity()这个方法了,而应该用startActivityForResultintent100这个方法了。

                               startActivity(intent):                                       //开启不接收返回数据

                               startActivityForResult(intent,100):              //开启并接收返回的数据

             a、设置Activity关闭时返回的数据

                Intent intent = new Intent();
              intent.putExtra(“name”,”王五”);
              intent.putExtra(“age”,22);
              setResult(200,intent);                                

             b、那么当以上的代码执行之后就会将数据返回了,然后开启Activity的方法接收数据并调用另一个方法: 

                 protected void onActivityResult(int requestCode,intresultCode,Intentdata){
                        ……
                    }

       会看到上面的那个方法中有三个参数,分别如下:

                requestCode startActivityForResult方法中传入的int值,用来区别是哪里开启的。

                resultCode setResult方法中传入的int值,用来区别哪里返回的

                data setResult方法中返回的Intent对象

        然后到此我们就清楚了这里的数据传输是怎么一回事了。过程大致如下:

         (1)、我们通过调用startActivityForResultintent100这个方法开启了一个activity,并将数据传了过去。

         (2)、当另外的一个Activity关闭的时候调用setResult200intent这个方法,将数据返回。

         (3)、返回来的数据,通过onActivityResult()这个方法接收到,然后进行各种处理。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值