zoukankan      html  css  js  c++  java
  • 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() ;
        }
    }

    实现效果:

    
    
  • 相关阅读:
    远程登陆服务——SSH
    A web-based 3D modeling framework for a runner-gate design( 一种基于web的三维建模框架)
    Vue+Element+Echarts+Springboot+微信小程序开发(肿瘤医学项目)
    基于拖放布局的 Twitter Bootstrap 网站生成器
    Ubuntu下git使用华为云/gitee/github
    在 Ubuntu 18.04 上安装 Postman
    在Ubuntu 18.04上安装Git与入门教程
    转载:渲染层和逻辑层
    Ubuntu系统中安装Neo4j
    NosqlBooster连接数据库失败connect ECONNREFUSED 127.0.0.1:27017——mongodb连接失败
  • 原文地址:https://www.cnblogs.com/ChangFen/p/6075044.html
Copyright © 2011-2022 走看看