zoukankan      html  css  js  c++  java
  • Android 学习笔记 6 组件通信及广播消息(一)

    Intent的概念

    Intent的官方解释是“An Intent is a messaging object you can use to request an action from another app component. ”这里的app component就是指安卓activity,service,contentprovider,broadcastreceiver四大组件。不同的intent可以使这些组件产生相应的动作,为这些组件之间提供了交互能力。那么这个“messaging object”具体的用途有“启动一个activity”,“启动一个service”,“提供一个Broadcast”。

    创建和注册一个新的Activity

    首先,编写一个类。该类需要继承自Activity。根据Activity的生命周期,通常重写onCreate方法完成该Activity子类的初始化,并且必须用 setContentView()来定义Activity布局,以对Activity进行初始化。
    创建secondActivity类
    public class SecondActivity extends Activity {
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_second);
    	}
    }
    

    并为其定义布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        
    <TextView 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/second_activity"/>
    </LinearLayout>

    这里string/second_activity定义显示的文字。

    第二步,注册该Activity子类。注册文件所在位置是/项目名/AndroidManifest.xml文件,修改该文件,注册编写的Activity子类。
    笔记四中提到AndroidManifest.xml是“Android项目的配置文件。Android项目中所使用的各种组件均需要在此文件中进行注册”,故新添加的activity要在AndroidManifest.xml中进行注册。事实上,用户使用的每个组件都必须在AndroidManifest.xml文件中的<application>节点内定义。
    修改后的AndroidManifest.xml如下:
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.learnerkiwi"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="19"
            android:targetSdkVersion="21" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity       <!--在这里注册了second_activity-->
                 android:name=".second_activity"
                 android:label="@string/second_activity"/>
        </application>
    
    </manifest>

    实现由MainActivity对SecondActivity的显式启动

    大致想法是要在MainActivity上放置一个按钮,然后通过点击按钮启动SecondActivity。

    首先在MainActivity.xml上添加一个button组件的布局

    <Button
            android:id="@+id/start_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/textView1"
            android:layout_below="@+id/textView1"
            android:layout_marginTop="20dp"
            android:text="@string/start_button"
            />

    之后修改MainActivity.java中的onCreate()方法

    protected void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button button = (Button)findViewById(R.id.start_button); 
            //设置点击事件
            button.setOnClickListener(new OnClickListener() 
            {
                @Override
                public void onClick(View v) 
                {
                    //生成意图,第二个参数为要启动的activity
                    Intent intent = new Intent(MainActivity.this, 
                            second_activity.class);
                    startActivity(intent);
                }
            });

    这里实现了一个onClickListener的匿名内部类,其中重写了onClick()方法,在方法里面构造生成了一个新的Intent对象。

    Intent的构造方法为 Intent(Context packgeContext ,Class <?> cls );两个构造参数分别指明了当前组件的类名和目标组件的类名,同时制定两个组件类是因为在Android中有一个活动栈,这样的构造方式才能确保正确的将前一个组件的活动压入栈中,才能在触发返回键的时候前一个组件活动能够正确出栈。

    接下来一句startActivity函数是Activity类自带的方法,intent作为参数。由于intent中封装了目标组件的类,通过该方法就可以启动目标组件了。

  • 相关阅读:
    HubbleDotNet 开源全文搜索数据库项目指定单词权重
    AcWing 12. 背包问题求具体方案
    Acwing 1058 股票买卖V
    AcWing 487 金明的预算方案
    AcWing 426. 开心的金明
    AcWing 1052. 设计密码
    AcWing 11. 背包问题求方案数
    AcWing 10. 有依赖的背包问题
    AcWing 1057. 股票买卖 IV
    AcWing 734 能量石
  • 原文地址:https://www.cnblogs.com/kiwibird/p/4915989.html
Copyright © 2011-2022 走看看