前言知识补充:
  什么是组件?
     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 代码

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <EditText
android:id="@+id/edt_main_text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入用户名">
<requestFocus />
</EditText> <Button
android:id="@+id/btn_main_start1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="一般启动" /> <Button
android:id="@+id/btn_main_start2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="带参数启动" /> <ProgressBar
android:id="@+id/pb_main"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/> </LinearLayout>

MainActivity.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.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar; public class MainActivity extends Activity implements OnClickListener {
private EditText edt_main_text1 ;
private Button btn_main_start1 ;
private Button btn_main_start2 ;
private ProgressBar pb_main ; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //初始化控件对象
edt_main_text1 = (EditText)findViewById(R.id.edt_main_text1) ;
btn_main_start1 = (Button)findViewById(R.id.btn_main_start1) ;
btn_main_start2 = (Button)findViewById(R.id.btn_main_start2) ;
pb_main = (ProgressBar)findViewById(R.id.pb_main) ; //设置点击监听
btn_main_start1.setOnClickListener(new OnClickListener() {//匿名内部类
@Override
public void onClick(View v) {
// 1.创建 Intent 对象 显示构造方法
Intent intent = new Intent(MainActivity.this, TestActivity.class);
// 2.启动Activity
startActivity(intent);
}
}) ; btn_main_start2.setOnClickListener(this) ;// 实现接口方式 //设置长按监听 这里也可以像点击监听匿名内部类的方式实现 ,这里是以外部类的方式
pb_main.setOnLongClickListener(new OnLongClikckListenerTest(this)) ;
}
@Override
public void onClick(View v) { //v 是发生事件的控件
// 1.创建 Intent 对象 显示构造方法
Intent intent = new Intent(this, TestActivity.class);
// 2.获取文本框中的数据
String message = edt_main_text1.getText().toString();
// 3.通过Intent 携带额外的数据
intent.putExtra("message", message);
// 4.启动带回调Activity
int requestCode = 2 ;
startActivityForResult(intent, requestCode) ;
} /**
* 回调方法
* requestCode:请求令牌
* resultCode:响应令牌
* */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==2 && resultCode==3){ //请求令牌和响应令牌 是否一直
String result = data.getStringExtra("result") ; // 获取返回数据
edt_main_text1.setText(result) ; // 设置数据到文本框中
}
}
}

OnLongClikckListenerTest.java 代码

 package com.example.android_activity_01;

 import android.content.Context;
import android.view.View;
import android.view.View.OnLongClickListener;
import android.widget.Toast;
/*
* 定义 长按监听
* */
public class OnLongClikckListenerTest implements OnLongClickListener {
private Context context ; public OnLongClikckListenerTest(Context context){ //构造方法
this.context = context ;
} @Override
public boolean onLongClick(View v) {
Toast.makeText(context, "我正在使用长按监听", 2).show() ; //显示
return true;
}
}

activity_test.xml  代码

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <EditText
android:id="@+id/edt_test_text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入用户名">
<requestFocus />
</EditText> <!--
这里 单击监听使用的是布局添加监听
-->
<Button
android:id="@+id/btn_test_back1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="一般返回"
android:onClick="back1"/> <Button
android:id="@+id/btn_test_back2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="带参数返回"
android:onClick="back2"/> </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() ;
}
}

实现效果:


Android四大组件之Activity一(组件的概念、Intent、监听)的更多相关文章

  1. 在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法!

    在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法! 其实像按键的监听,我相信很多人都很熟练了,我肯定也不会说这些基础的东西,所以,前期,还是 ...

  2. [转]Android四大核心组件:Activity+Service+BroadcastReceiver+ContentProvider

    原文地址:http://c.biancheng.net/view/2918.html Android 作为一个移动设备的开发平台,其软件层次结构包含操作系统 (OS).中间件 (MiddleWare) ...

  3. 第34天学习打卡(GUI编程之组件和容器 frame panel 布局管理 事件监听 多个按钮共享一个事件 )

    GUI编程 组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 1 简介 GUi的核心技术:Swing AWT 1.界面不美观 2.需要jre环境 为什么要学习GU ...

  4. Android开发之PullToRefresh的Click点击事件的监听实现长按删除Item

    本文为原创博客.出自http://blog.csdn.net/minimicall 到今天为止,搜芽的卖家版本号应该来说已经基本完毕.攻坚克难的一路过来.速度也控制的比較好. 项目过程进度 从任务分配 ...

  5. [转]android:动态创建多个按钮 及 批量设置监听

    之前投机取巧,先创建好多个按钮,再根据需要的数量进行部分隐藏,不过还是逃不过呀. 这样根本无法批量地 findId,批量地 设置监听. 所以今天还是认认真真地研究回“动态创建按钮”,终于,通过不断尝试 ...

  6. Android简易实战教程--第二十一话《内容观察者监听数据库变化》

    当数据库的数据发生改变,我们又想知道具体改变的情况时,就需要对数据库的变化情况做一个监控.这个任务,就由内容观察者来完成.下面这个案例,为短信数据库注册内容观察者,来监控短信的变化情况,当短信数据库发 ...

  7. 学习Android过程中遇到的问题及解决方法——电话监听

    也许有时你会有这样一个需求:通电话时有一个重要的事需要记下来或者和一个陌生人特别是大骗子通话时,这是就想如果能把通话录下来就方便多了.(这才是我写这个代码的目的!!!) 在此过程中,犯了一个很大的错误 ...

  8. android中SeekBar拖动进度条的使用及事件监听

    下面和大家分享一下android中SeekBar拖动进度条的使用,以及事件监听.拖动进度条的事件监听需要实现SeekBar.OnSeekBarChangeListener接口,调用SeekBar的se ...

  9. android dialog 原来dialog对话框也有自己的按键监听事件 onKeyDown方法

    探讨在一个activity中按menu键时弹出自己定义的dialog(自定义菜单对话框)时,再按一次手机的menu键发现这个自定义的dialog菜单并没有关闭,原来是这个dialog内部也有onKey ...

  10. Android View转为图片保存为本地文件,异步监听回调操作结果;

    把手机上的一个View或ViewGroup转为Bitmap,再把Bitmap保存为.png格式的图片: 由于View转Bitmap.和Bitmap转图片都是耗时操作,(生成一个1M的图片大约500ms ...

随机推荐

  1. Javascript动画效果(四)

    Javascript动画效果(四) 前面我们自己写了一个小小的关于js动画的插件,下面我们来使用之前的框架来完成我们想要的动画效果.我们经常在淘宝网中看到,鼠标经过某一图片时,该图片有从上滚出而又从下 ...

  2. Javascript编程风格

    Douglas Crockford是Javascript权威,Json格式就是他的发明. 去年11月他有一个演讲(Youtube),谈到了好的Javascript编程风格是什么.我非常推荐这个演讲,它 ...

  3. 关于Razor引擎的语法说明

    1.在页面上显示字符串的值, 格式:a*@变量名 但@之前必须有空格,{.}等,使得a*不可以构成变量的字符.

  4. react路由案例(非常适合入门)

    前面已经已经讲过一次路由   稍微有些复杂   考虑到有些同学刚接触到   我准备了一个简单的demo   就当自己也顺便复习一下 data.js const data = [ { name: 'Ta ...

  5. 前端scss的使用及gulp发布方式

    如标题所述,这篇博文是说scss以及gulp发布方式: 如果你没用过scss和gulp或不甚了解,你可以看看这篇博文,叙说的水平有限,各位看官大神见谅: 说scss之前,先来说说sass,sass是一 ...

  6. Android Studio导入项目非常慢的解决办法

    问题 Android Studio目前已经更新到2.0 Preview 6了,作为Google大力推崇的开发工具,相对于Eclipse ADT有着不可比拟的优势.然而在实际使用时,依然有不少不爽的地方 ...

  7. [译]学习IPython进行交互式计算和数据可视化(六)

    第五章:高性能并行计算 一个反复被提及的反对使用Python进行高性能数值计算的言论是这种语言是动态解释型的,速度太慢.一种编译型低级语言,如C,能提供比它快几个数量级的运算速度.我们在第三章--使用 ...

  8. LeetCode - 52. N-Queens II

    52. N-Queens II Problem's Link --------------------------------------------------------------------- ...

  9. Stream/Bytes[]/Image对象相互转化

    Stream/Bytes[]/Image对象相互转化 Stream转Byte数组.Image转Byte数组.文件转Stream等 /// <summary> /// 将 Stream 转成 ...

  10. webservice入门(1)

    前段时间学习了webservice的用法,虽然只是一些简单的用法,但是如果久了还是会忘记的,所以将学到了记录下来. 一:schema和http协议. 1.schema约束: schema规范中: . ...