Android学习之Activity初步

时间:2021-09-16 05:02:46

Activity作为Android的第一步接触的概念,在学习中将初步的认识总结下来,以便后续的回顾与反思。

1、在用Android Studio生成第一个helloworld应用程序运行在手机上时,发现继承自Activity的MainActivity生成的界面上,默认的Label是不可见的,即使在AndroidManifest文件中定义android:Label="This is FirstActivity"也无济于事。后来才发现应该是继承Activity的原因,将其改为extends AppCompatActivity即可。

2、注意XML文件中@+id/与@String这样的区别,+号表示要构建唯一的标识符,而没有+号则意味着是引用之意。

3、Intent:作为Activity中用来传递活动、信息的传递者,它有多个构造函数,并存在两种方式:显式Intent和隐式Intent:

显式Intent:

1  public void onClick(View view) { //点击按钮就会执行onClick方法
2                 Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
3                 startActivity(intent);

Intent的两个参数用来指示出发的Activity和将要启动的Activity,并且利用startActivity的方法,将intent传入该方法,就可以进行Activity之间的切换。

隐式Intent:

隐式Intent的主要部分并非在class文件中,而在于Androidmanifest的Activity注册中:

<activity android:name=".ThirdActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="http"/>
            </intent-filter>
        </activity>

注意到intent-filter中的两个参数:action和category(action只能有一个,而category则可以有多个),这些相当于ThirdActivity的一个内在特征,在代码中使用隐式intent时,就需要进行“匹配”,才会得到正确的运行方式:

public void onClick(View view) {
                Intent intent = new Intent("android.intent.action.VIEW");
                intent.addCategory("android.intent.category.DEFAULT");
                startActivity(intent);

Intent的这个构造方法将action作为参数,category若是default则可以不用写出,这样两者的特征得到“匹配”,就可以得到与显式intent相同的Activity切换效果。注意:若category采用自定义的方式在manifest文件中注册,那么在Intent方法中需要使用如下addCategory方法进行说明:

intent.addCategory("android.intent.category.MY_DEFAULT");

这样才能使得manifest文件与intent传递信息“匹配”成功,才能正确的启动目标Activity。