zoukankan      html  css  js  c++  java
  • 基于监听的事件处理——外部类作为事件监听器类

           使用内部类定义事件监听器类的形式比较少见,主要因为如下两个原因:

    • 事件监听器通常属于特定的GUI界面,定义成外部类不利于提高程序的内聚性。
    • 外部类形式的事件监听器不能自由访问创建GUI界面的类中的组件,编程不够简洁。

           但如果某个事件监听器确实需要被多个GUI界面所共享,而且主要是完成某种业务逻辑的实现,则可以考虑使用外部类的形式来定义事件监听器类。下面的程序定义了一个外部类作为OnLongClickListener类,该事件监听器实现了发送短信的功能。

          

    package com.example.studyevent;
    
    import android.app.Activity;
    import android.app.PendingIntent;
    import android.content.Intent;
    import android.telephony.SmsManager;
    import android.view.View;
    import android.view.View.OnLongClickListener;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class SendSmsListener implements OnLongClickListener{
        public Activity act;
        private EditText address;
        private EditText content;
        
        public SendSmsListener(Activity act,EditText address,EditText content)
        {
            this.act=act;
            this.address=address;
            this.content=content;
        }
        @Override
        public boolean onLongClick(View source) {
            // TODO Auto-generated method stub
            String addressStr=address.getText().toString();
            String contentStr=content.getText().toString();
            //获取短信管理器
            SmsManager smsManager=SmsManager.getDefault();
            //创建发送短信的PendingIntent
            PendingIntent sentIntent=PendingIntent.getBroadcast(act,
                    0,new Intent(), 0);
            //发送文本短信
            smsManager.sendTextMessage(addressStr, null, contentStr, sentIntent, null);
            Toast.makeText(act,"短信发送完成",Toast.LENGTH_LONG).show();
            return false;
        }
    
    }

         上面的事件监听器类没有与任何GUI界面耦合,创建该监听器对象时需要传入两个EditText对象和一个Activity对象,其中一个EditText用于作为收信人号码,一个EditText用于作为短信内容。
         该程序的界面布局文件如下:

          

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:gravity="fill_horizontal"
        tools:context=".SendSmsActivity" >
      
    <EditText
        android:id="@+id/address"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:hint="请填写收信号码"
        />
    <EditText
        android:id="@+id/content"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:hint="请填写短信内容"
        android:lines="3"
        />
    <Button
        android:id="@+id/send"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:hint="发送"
        />        
    </LinearLayout>
        

    该程序的Java代码如下:

      

    package com.example.studyevent;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.widget.Button;
    import android.widget.EditText;
    
    public class SendSmsActivity extends Activity {
      EditText address;
      EditText content;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_send_sms);
            //获取页面中收件人地址、短信内容
            address=(EditText)findViewById(R.id.address);
            content=(EditText)findViewById(R.id.content);
            Button bn=(Button)findViewById(R.id.send);
            bn.setOnLongClickListener(new SendSmsListener(this,address,content));
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.send_sms, menu);
            return true;
        }
    
    }

    上面的程序中粗体字代码用于为指定按钮的长单击事件绑定监听器,当用户长单击界面中的bn按钮时,程序将会触发SendSmsListener监听器,该监听器里包含的事件处理方法将会向指定手机发短信。

        此处使用模拟器来发送短信——不要指望能给你的女朋友发送短信,否则中国移动要恼火了。该程序只能向另一台模拟器发送短信,比如执行如下命令来启动另一台模拟器(直接使用abc镜像文件来启动模拟器)

             emulator -avd abc

          运行程序将出现如下效果:

    发送短信界面

       接收短信界面:  

     

         

  • 相关阅读:
    1.1【基本路由原理】(二层转发原理)1
    NP课前资料2-IOU的传统安装方式
    NP课前资料1-安装GNS3桥接ASA
    1.2 数据仓库的特性
    1-1 事务型处理与分析型处理
    易用性测试关注点(转)
    Jenkins+svn+ant+tomcat持续集成
    并发数计算
    性能测试需求采集
    性能测试指标分析与监控
  • 原文地址:https://www.cnblogs.com/wolipengbo/p/3406989.html
Copyright © 2011-2022 走看看