android学习Activity笔记

1.     Activity

Activity代表一个活动,活动是Android基本应用组件,一般情况下就是一个单独的屏幕,例如你能看到的页面。Activity上有很多View的实例,所有的Activity都要集成android.app.Activity类,重写实现onCreat方法。

当Activity_01启动Activity_02时,Activity_01从屏幕中消失,屏幕出现Activity_02,Activity_02将会压入Activity_01所在的栈中,当用户触发返回键时,Activity_02从栈中弹出,Activity_01又显示在屏幕前,是一种“后进先出”的结构。

新建一个Activity实例,需要继承android.app.Activity类。

public class FirstActivity extends Activity {
       protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              requestWindowFeature(Window.FEATURE_NO_TITLE) ;  //取消App的标题
              setContentView(R.layout.first_layout) ; // 绑定布局文件;
       }
}
定义之后,需要再AndriodManifest.xml文件中进行注册:

<?xml version="1.0" encoding="utf-8"?>         //xml报文头
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.androidapplication"   // 定义了主活动Acitivity路径
    android:versionCode="1"
    android:versionName="1.0" >
<uses-sdk
        android:minSdkVersion="15"      //适配的Android最低版本;
        android:targetSdkVersion="16" />
    <application
        android:allowBackup="false"   //标识是否进行数据备份,true表示备份,一般情况下鉴于安全考虑设置为false
        android:icon="@drawable/ic_launcher"   //App图标设置
        android:label="@string/app_name"      //App名称
        android:theme="@style/AppTheme" >  
        <activity
            android:name=".FirstActivity"
            android:label="This is my first Activity">
            <!-- 标识该Activity为主活动 -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".SecondActivity"
            android:label="This is my second Activity">
        </activity>
    </application>
</manifest>
这样就配置ok了,在AndriodManifest.xml中有且只有一个主活动,根据<intent-filter>来判断。

2.     Intent

Intent中文意思就是“目的”,意思就是当前屏幕要跳转到哪里,或者说当前一个Acitiviy前往另一个Activity就需要用到Intent。

方式一:样例代码:

Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent) ; // 启动Activity

方法:Intent(Context packageContext, Class<?> cls) 传入组件的构造函数,packageContext也就是上文提到,cls为跳转的Acitivity类,意思就是从当前FirstActivity切换到SecondActivity去。为什么需要指定两个活动呢?因为在Android中有一个活动栈,这样的构造方式才能确保正确的将前一个活动压入栈中,才能在触发返回键的时候活动能够正确出栈。至于AndroidManifest.xml配置这里就不赘述,见上面。

运行截图:

   

程序中给Button添加了一个监听事件,按钮触发后,利用Intent进行Activity跳转至另一个Activity,见图2

     方式二:样例代码

Intent intent = new Intent(Intent.ACTION_EDIT, null);
startActivity(intent);

Intent(String action, Uri uri) 指定Action类型和Uri的构造函数,URI主要是结合程序之间的数据共享ContentProvider该方式是另外一种Activity跳转,弹出一个dailog进行选择。

比如添加一个主活动,再添加两个跳转活动,通过该方式进行选择跳转,需要再AndroidManifest.xml中进行相关配置:

<activity
            android:name=".SecondActivity"
            android:label="This is my second Activity">
            <intent-filter>
                   <action android:name="android.intent.action.EDIT" />
                   <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
</activity>
<activity
            android:name=".ThirdActivity"
            android:label="This is my third Activity">
             <intent-filter>
                   <action android:name="android.intent.action.EDIT" />
                   <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
</activity>
执行此段代码时,系统会根据主配置AndroidManifest.xml中寻找<action android:name="android.intent.action.EDIT" />,如果对应为多个activity具有<actionandroid:name="android.intent.action.EDIT" />此时就会弹出一个dailog选择Activity。

运行截图:


选择之后则跳转到对应的Activity,这是一种选择性跳转方式。

3.     利用Intent在Activity间传送数据

Intent除了在进行页面跳转外,还可以传递参数给下一个Activity。Intent负责Android应用的各项组件间的通讯,参考百度文库上的解释,“Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用

举个简单例子,在一个手机短信列表的场景中,假设当前列表对应Activity01,当点击某条短信后,能够跳转至此短信的详细信息屏幕Activity02。鉴于实现该目的,Activity01需要构造一个Intent,这个Intent用于告诉系统,我们要做“查看”动作,此动作对应的查看对象是“某具体短信”,然后调用Activity01 (Intent intent),将构造的Intent传入,系统会根据此Intent中的描述,到AndroidManifest.xml中找到满足此Intent要求的Activity对象,系统调用找到的 Activity02,将 Intent传入给该对象,Activity02根据此Intent中的描述,执行相应的操作。

简单来说,intent相当于媒介作用。

举例说明吧,比如传递数据给下一个活动:

FirstActivity:

Intent intent = new Intent(FirstActivity.this,SecondActivity.class) ;
intent.putExtra("transfer_data", "I am the firstActivity") ;
startActivity(intent) ;

在该类中,用Intent构造函数指定从FirstActivity前往SecondActivity,同时利用intent将参数传递给下一个活动。在Intent中定义了很多方式,基本都是key-value键值对进行保存,到下一个活动中根据key获取即可得到valyue.


SecondActivity

Intent intent = getIntent() ;
tring data = intent.getStringExtra("transfer_data") ;
Log.i("info", data) ;
利用getIntent()获取传递给SecondActivity的intent, getIntent()是将返回伴随启动Activity时的intent对象,源码如下:

/** Return the intent that started this activity. */
  public Intent getIntent() {
        return mIntent;
  }
启动后,可以在LogCat中看到,此刻说明已经利用intent进行了两个活动间数据传递,总结下,哈哈。

关于LogCat使用,其用途跟web开发中的Logger.info()作用类似,在android开发中,都是采用tag来标识开发者所需要输出的内容,在下图中by Log Tag中输入“info“即可以看到本例中的输出信息了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值