Android四大组件之Activity一(组件的概念、Intent、监听)

前言知识补充:
  什么是组件?
     1.它的类必须实现特定接口或继承特定类
     2.需要在配置文件中配置其全类名
     3.它的对象不是通过new来创建的, 而是系统自动创建的
     4.它的对象具有一定的生命周期, 它的类中有对应的生命周期回调方法
 
一、什么是Activity?
   Activity, 直译为活动, 它是Android定义的四大应用组件之一,也是最重要用得最多的.
   Activity用来提供一个能让用户操作并与之交互的界面


   Activity的API:
      startActivity(Intent intent): 一般启动Activity
      startActivityForResult(int reqCode, Intent intent): 带回调启动Activity
      onActivityResult(int reqCode, int resultCode, Intent data): 回调方法
      setResult(int resultCode, Intent data): 设置要返回的结果
      finish(): 结束当前Activity
      getIntent(): 得到启动Activity的意图

二、Intent
   1.什么是Intent?
      Intent, 直译为意图, 也就是你想要做什么或想要去哪?
  2.Intent有什么作用?
      Intent是Activity, Service和BroadcastReceiver这三个应用组件之间进行通信的信使,意图对象还可以携带数据

  3.Intent的分类
      显示意图 : 明确指定的目标组件的意图
      创建对象 : Intent(Context context, Class clazz)
      何时使用 : 当操作当前自己应用的组件时使用

      隐式意图 : 没有明确指定目标组件的意图
      创建对象 : Intent(String action)
      何时使用 : 当操作其它应用的组件时使用 

   4.Intent的API:
       Intent(Context packageContext, Class<?> cls) :  用于创建显示意图对象
       Intent(String action): 用于创建隐式意图对象
       putExtra(String name, Xxx value): 保存额外数据
       Xxx getXxxExtra(String name): 获取额外数据
       setData(Uri data): 设置有特定格式的uri数据
   
   注意: Intent不是Android中的四大应用组件之一
 
三、监听(listener)
   1.单击监听:setOnClickListener(OnClickListener listener)
        1).方式一:  Activity中添加监听: 
           view.setOnClickListener(OnClickListener listener);
        2).方式二:  布局添加监听: 
           layout中:   android:onclick=“方法名”
           Activity中: public void 方法名(View v) {   }
   2.长按监听:setOnLongClickListener(OnLongClickListener listener)
        注意:长按监听 只能在Activity中添加监听,不能在布局添加监听

下面 一个小案例 测试: 

activity_main.xml 代码

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:layout_width="fill_parent"
 3     android:layout_height="fill_parent"
 4     android:orientation="vertical" >
 5 
 6     <EditText
 7         android:id="@+id/edt_main_text1"
 8         android:layout_width="match_parent"
 9         android:layout_height="wrap_content"
10         android:hint="请输入用户名">
11         <requestFocus />
12     </EditText>
13 
14     <Button
15         android:id="@+id/btn_main_start1"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:text="一般启动" />
19 
20     <Button
21         android:id="@+id/btn_main_start2"
22         android:layout_width="wrap_content"
23         android:layout_height="wrap_content"
24         android:text="带参数启动" />
25 
26     <ProgressBar
27         android:id="@+id/pb_main"
28         style="?android:attr/progressBarStyleLarge"
29         android:layout_width="wrap_content"
30         android:layout_height="wrap_content"/>
31 
32 </LinearLayout>

MainActivity.java 代码

 1 package com.example.android_activity_01;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.view.View.OnClickListener;
 8 import android.widget.Button;
 9 import android.widget.EditText;
10 import android.widget.ProgressBar;
11 
12 public class MainActivity extends Activity implements OnClickListener {
13     private EditText edt_main_text1 ;
14     private Button btn_main_start1 ;
15     private Button btn_main_start2 ;
16     private ProgressBar pb_main ;
17     
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22         
23         //初始化控件对象
24         edt_main_text1 = (EditText)findViewById(R.id.edt_main_text1) ;
25         btn_main_start1 = (Button)findViewById(R.id.btn_main_start1) ;
26         btn_main_start2 = (Button)findViewById(R.id.btn_main_start2) ;
27         pb_main = (ProgressBar)findViewById(R.id.pb_main) ;
28         
29         //设置点击监听  
30         btn_main_start1.setOnClickListener(new OnClickListener() {//匿名内部类
31             @Override
32             public void onClick(View v) {
33                 // 1.创建 Intent 对象 显示构造方法
34                 Intent intent = new Intent(MainActivity.this, TestActivity.class);
35                 // 2.启动Activity
36                 startActivity(intent);
37             }
38         }) ;
39         
40         btn_main_start2.setOnClickListener(this) ;// 实现接口方式
41         
42         //设置长按监听 这里也可以像点击监听匿名内部类的方式实现 ,这里是以外部类的方式
43         pb_main.setOnLongClickListener(new OnLongClikckListenerTest(this)) ;
44     }
45     @Override
46     public void onClick(View v) { //v 是发生事件的控件
47         // 1.创建 Intent 对象 显示构造方法
48         Intent intent = new Intent(this, TestActivity.class);
49         // 2.获取文本框中的数据
50         String message = edt_main_text1.getText().toString();
51         // 3.通过Intent 携带额外的数据
52         intent.putExtra("message", message);
53         // 4.启动带回调Activity
54         int requestCode = 2 ;
55         startActivityForResult(intent, requestCode) ;
56     }
57     
58     /**
59      * 回调方法
60      * requestCode:请求令牌
61      * resultCode:响应令牌
62      * */
63     @Override
64     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
65         super.onActivityResult(requestCode, resultCode, data);
66         if(requestCode==2 && resultCode==3){                //请求令牌和响应令牌 是否一直
67             String result = data.getStringExtra("result") ; // 获取返回数据 
68             edt_main_text1.setText(result) ;                // 设置数据到文本框中
69         }
70     }
71 }

OnLongClikckListenerTest.java 代码

 1 package com.example.android_activity_01;
 2 
 3 import android.content.Context;
 4 import android.view.View;
 5 import android.view.View.OnLongClickListener;
 6 import android.widget.Toast;
 7 /*
 8  * 定义 长按监听
 9  * */
10 public class OnLongClikckListenerTest implements OnLongClickListener {
11     private Context context ;
12     
13     public OnLongClikckListenerTest(Context context){            //构造方法
14         this.context = context ;
15     }
16     
17     @Override
18     public boolean onLongClick(View v) {        
19         Toast.makeText(context, "我正在使用长按监听", 2).show() ;    //显示
20         return true;
21     }
22 }

activity_test.xml  代码

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:layout_width="fill_parent"
 3     android:layout_height="fill_parent"
 4     android:orientation="vertical" >
 5 
 6     <EditText
 7         android:id="@+id/edt_test_text1"
 8         android:layout_width="match_parent"
 9         android:layout_height="wrap_content"
10         android:hint="请输入用户名">
11         <requestFocus />
12     </EditText>
13 
14     <!-- 
15         这里 单击监听使用的是布局添加监听
16      -->
17     <Button
18         android:id="@+id/btn_test_back1"
19         android:layout_width="wrap_content"
20         android:layout_height="wrap_content"
21         android:text="一般返回" 
22         android:onClick="back1"/>
23 
24     <Button
25         android:id="@+id/btn_test_back2"
26         android:layout_width="wrap_content"
27         android:layout_height="wrap_content"
28         android:text="带参数返回" 
29         android:onClick="back2"/>
30 
31 </LinearLayout>

TestActivity.java

package com.example.android_activity_01;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class TestActivity extends Activity {
    private EditText edt_test_text1 ;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        // 初始化 控件
        edt_test_text1 = (EditText)findViewById(R.id.edt_test_text1) ;
        
        // 5.等到 Intent 对象
        Intent intent = getIntent() ;
        // 6.获取 Intent 带来的额外数据
        String message = intent.getStringExtra("message") ;
        // 7.显示到 EditText控件中
        edt_test_text1.setText(message) ;
    }
    
    /*
     * 布局监听的两个方法
     */
    // 一般返回
    public void back1(View v){
        finish() ;// 关闭当前界面
    }
    // 带参数返回
    public void back2(View v) {
        // 设置一个令牌
        int resultCode = 3;
        // 设置 回调参数
        Intent data = new Intent() ;
        data.putExtra("result", edt_test_text1.getText().toString()) ;
        setResult(resultCode , data) ;
        // 关闭当前界面
        finish() ;
    }
}

实现效果:

 


 

posted @ 2016-11-17 18:59  常风  阅读(922)  评论(0编辑  收藏  举报