Android应用程序设计 监听及组件

监听事件

版权声明:本文为博主原创文章,未经博主允许不得转载。https://mp.csdn.net/postedit/81838521

点击事件

关键字:onclickListener

控件点击时会触发该事件。

  • 使用流程
  • 控件添加唯一标识

在布局文件中对需要监听的控件添加id。代码示例如下:

 <Button

        android:id="@+id/btn"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Hello World!"/>

  • 获取控件

关键字:findViewById(id)方法。代码示例如下:

 Button btn= (Button) this.findViewById(R.id.btn);

  • 绑定监听事件

关键字:setOnClickListener()

btn.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

               

            }

        });

  • 业务逻辑

以弹出信息(吐司 )为例:

Toast.makeText(MainActivity.this, "这是点击后提示框", Toast.LENGTH_SHORT).show();

 

  • Toast

一种简易的浮动的消息提示框。它永远不会获得焦点,无法被点击,而且Toast显示的时间有限,Toast会根据用户设置的显示时间后自动消失。

  • 使用
    • 长时间显示

Toast.makeText(MainActivity.this, "这是点击后提示框", Toast.LENGTH_LONG).show();

  • 短时间显示

Toast.makeText(MainActivity.this, "这是点击后提示框", Toast.LENGTH_SHORT).show();

  • 界面Activity

Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个Activity构成,每写一个activity必须在AndroidManifest.xml中注册。

  • 位置

以主界面MainActivity为例:

src目录包名下的Java文件,继承自Activity

关键代码摘录如下:

public class MainActivity extends AppCompatActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    }

}

    1. 注册

以MainActivity的注册为例:

摘录配置如下:

<activity android:name=".MainActivity">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    1. 生命周期

四个状态(运行、暂停、停止、死亡)、七个方法,如图

在Activity中重写父类的不同周期状态的方法

  1. onCreate()    创建:后台创建Activity,并分配运行资源
  2. onStart()     开始运行:后台Activity转为前台运行
  3. onResume()    继续运行(运行中):前台Activity获取焦点
  4. onPause()     暂停运行:前台Activity失去焦点  
  5. onStop()          停止运行:前台Activity转为后台运行
  6. onRestart()       重新运行:后台Activity重新转为前台运行
  7. onDestroy()       销毁:释放运行资源
    1. 跳转

关键字:intent

      1. 显式跳转

// 设置参数(1源Activity,2目的Activity.class):Activity跳转的参数

Intent intent = new Intent(MainActivity.this, SucceedActiviry.class);

// 开始Activity之间的跳转

startActivity(intent);

      1. 隐式跳转

// 初始化一个Intent时就设置Activity跳转的参数(1调用的权限,2传递的参数)

// 设置的参数:1调用拨打电话的功能,2传递拨打的号码

// 该权限需要在AndroidManifest.xml文件中声明

// <uses-permission android:name="android.permission.CALL_PHONE" />

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:110"));

// 开始Activity之间的跳转

startActivity(intent);

    1. 跳转时数据通信

我们可以在跳转时,实现数据的传递。如登录成功后,把登录后的用户信息传递给下一个界面。关键字:Bundle

bundle相当于map类,通过(key,value)方式描述数据。

      1. 传递数据

Bundle bundle = new Bundle();

//向Bundle中添加数据,需指定key(key必须唯一,不然会覆盖值),不同的数据类型使用不同的方法

bundle.putString("name", “xxx”);

bundle.putInt("age", 15);

//把Bundle对象添加到Intent对象中,就可以通过Intent对象的跳转传递数据

intent.putExtras(bundle);

      1. 解析数据

//获取bundle

Bundle bundle = this.getIntent().getExtras();

//通过键获取对应的值

String name= bundle.getString("name");

int age = bundle.getInt("age");

 

 

    1. Intent类(回调传值)

关键字:  

StartActivityForResult(Intent,requestCode)       //在待获取数据界面

onActivityResult(requestCode,resultCode,date)//在待获取数据界面

setResult(resultCod,Intent)               // 在生成数据界面

使用Intent请求数据

// 初始化一个Intent时就设置Activity跳转的参数

Intent intent = new Intent(MainActivity.this, SucceedActiviry.class);

// 开始Activity之间的跳转,必须指定请求码,被请求端根据请求码区分不同的请求

startActivityForResult(intent, 3);    //3: requestCod(请求码)

 

//如果执行带请求码的跳转,必须重写onActivityResult()方法

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (resultCode == 4) {

     //获取Bundle数据

      Bundle bundle = data.getExtras();

      String user = bundle.getString("user");

      edtUser.setText(user);   //设置显示内容

}   

}

 

使用Intent发送数据

//获取用户名和密码

String user = edtUser.getText().toString().trim();

String pwd = edtPwd.getText().toString().trim();

//保存数据到Bundle

Bundle bundle = new Bundle();

bundle.putString("user", user);

bundle.putString("pwd", pwd);

//创建Intent对象

Intent intent = new Intent();

//把数据放入Intent对象中

intent.putExtras(bundle);

//设置带返回码的请求

setResult(RESULT_CODE, intent);

//关闭本地Activity

finish(); 

    1. 权限管理

当程序需要调用Android系统中权限时,需要声明申请批准的权限。声明权限如下:

在AndroidManifest.xml文件中添加代码

//声明需要批准的权限为name中的字段,此段代码为添加拨打电话的功能

<uses-permission android:name="android.permission.CALL_PHONE" />

常见权限汇总可参考Android常用的权限介绍.txt文档

  • BroadcastReceiver

监听系统广播或者用户自定义广播,在接收到广播之后做出响应处理。

    1. 完整思路
  1. 继承BroadcastReceivre基类

任何广播都需要继承实现BroadcastReceiver类,该类为abstract抽象类。代码摘录如下:

// 继承BroadcastReceivre基类

public class MyReceiver extends BroadcastReceiver {

  // 复写onReceive()方法

  // 接收到广播后,则自动调用该方法

  @Override

  public void onReceive(Context context, Intent intent) {

   //写入接收广播后的操作

    }

}

  1. 必须复写抽象方法onReceive()方法

广播接收器接收到相应广播后,会自动回调 onReceive() 方法

一般情况下,onReceive方法会涉及 与 其他组件之间的交互,如发送Notification、启动Service等

默认情况下,广播接收器运行在 UI 线程,因此,onReceive()方法不能执行耗时操作,否则将导致ANR

  1. 注册广播  

动态注册。注册方式:在代码中调用Context.registerReceiver()方法,代码示例如下:

// 1. 实例化BroadcastReceiver子类 &  IntentFilter

     MyReceiver mBroadcastReceiver = new mBroadcastReceiver();

     IntentFilter intentFilter = new IntentFilter(ConnectivityManager.ACTION_NETWORK);

    // 2. 动态注册:调用Context的registerReceiver()方法

     registerReceiver(mBroadcastReceiver, intentFilter);

  1. 取消注册

在界面Activity销毁的时候需要取消注册该广播,否则会内存泄漏。

unregisterReceiver(mBroadcastReceiver);

猜你喜欢

转载自blog.csdn.net/qq_42595261/article/details/81838521