Android开发文档之四种点击事件

此文档适合有一定java基础的人员学习

今天,我们用过一个案例来学习一下点击事件的处理,在这个案例(拨打电话)中,我讲介绍四种点击事件的处理。

在介绍点击事件处理之前,我们需要了解一下需求。首先拨打电话需要一个输入号码的地方,然后就是拨打按钮,界面布局我们可以这样:


Android开发文档之四种点击事件_第1张图片


其所对用的activity_mian.xml代码如下:



    
    

好了,布局已经写好,下面我们就开始进行点击事件的处理了


1、 匿名内部类

匿名内部类就是说一个类(一般是接口)在另一个方法内部实现(我的理解,可能不对,请按照课本真实理解)

其代码如下:

package com.hackerant.callphone;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity
{
        private Button btCall;
        private EditText etNum;

        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                
                //获取对象
                btCall = (Button) findViewById(R.id.bt_call);
                etNum = (EditText) findViewById(R.id.et_phoneNum);
                //设置点击事件
                //点击事件相应方法一,匿名内部类
                btCall.setOnClickListener(new OnClickListener()
                {
                        
                        @Override
                        public void onClick(View v)
                        {
                                callPhone();
                                
                        }
                });
                
                
                
                
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu)
        {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
        }
        
        /**
         * 处理拨打电话的业务
         */
        public void callPhone()
        {
                String num = etNum.getText().toString().trim();
                
                //如果输入电话号码为空
                if (TextUtils.isEmpty(num))
                {
                        Toast.makeText(getApplicationContext(), "请输入电话号码!", Toast.LENGTH_SHORT).show();
                        return ;
                }
                //Intent三步骤:创建-->设置action-->start
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_CALL);
                intent.setData(Uri.parse("tel:" + num));
                startActivity(intent);
                
        }


}


OKjava代码已经完成,但如果你直接点击运行(Run As Android Application),你将看到如下错误(屏幕+logcat日志):

Android开发文档之四种点击事件_第2张图片





该错误是因为在Android中拨打电话可能产生费用,故而需要相应的权限,你需要在AndroidManifest.xml中写上拨打电话的权限,代码是:



其位置如下截图:


Android开发文档之四种点击事件_第3张图片


这时才是真正的完成了,其成功截图如下:

Android开发文档之四种点击事件_第4张图片 Android开发文档之四种点击事件_第5张图片


说明:由于我们已将打电话的业务代码给单独写出,所有在后面的事件中,我们只介绍关键代码

 

2、 重写OnClickListener


 其核心代码如下:

@Override
        protected void onCreate(Bundle savedInstanceState)
        {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                
                //获取对象
                btCall = (Button) findViewById(R.id.bt_call);
                etNum = (EditText) findViewById(R.id.et_phoneNum);
                //设置点击事件
                //点击事件相应方法而
                btCall.setOnClickListener(new myOnclickListener());
                
                
                
                
        }
/**
         * 重写OnClickListener方法
         * @author jun
         *
         */
        public class myOnclickListener implements OnClickListener  {

                @Override
                public void onClick(View v)
                {
                        callPhone();
                        
                }
                
        }

其结果参考方法一


3、 让MainActivity继承OnClickListener


其核心代码如下:


package com.hackerant.callphone;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener
{
        private Button btCall;
        private EditText etNum;

        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                
                //获取对象
                btCall = (Button) findViewById(R.id.bt_call);
                etNum = (EditText) findViewById(R.id.et_phoneNum);
                //设置点击事件
                //点击事件相应方法三,该方法需要MainActivity继承OnclickListener,此方法最常用
                btCall.setOnClickListener(this);
                
                
                
                
        }

        
        public void callPhone()
        {
                String num = etNum.getText().toString().trim();
                
                if (TextUtils.isEmpty(num))
                {
                        Toast.makeText(getApplicationContext(), "请输入电话号码!", Toast.LENGTH_SHORT).show();
                        return ;
                }
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_CALL);
                intent.setData(Uri.parse("tel:" + num));
                startActivity(intent);
                
        }

        @Override
        public void onClick(View v)
        {
                switch (v.getId())
                {
                case R.id.bt_call:
                        callPhone();
                        break;

                default:
                        break;
                }
                
        }

}

其结果参考方法一

 

4、在布局文件中写onclick事件

      在activity_main.xml中,改写button代码如下:



其onClick对应得便点击方法,该方法则不需要重写OnClickListener

 

特别介绍:

Toast.makeText(getApplicationContext(), "请输入电话号码!",Toast.LENGTH_SHORT).show();

 

Toast英文表示祝酒,但在此处表示弹出框,如上面截图中的“请输入电话号码!”便是。在Toast中,一定要有show()方法,因为只有show()才能show出来,否则只是创建一个Toast对象,并没有任何行为。

在makeText中,第一个参数表示上下文,一般我们能用到的是this,getApplicationContext()或**Activity.this,第二个参数是你需要弹出的内容,第三个参数是时长,可以为0 (Toast.LENGTH_SHORT)也可以为1(Toast.LENGTH_LONG)

 

恩,这一篇学习文档就先介绍到这,由于很多原因(主要是我懒)有些知识说的不是很清楚,欢迎前来询问,也希望大神们多多帮助!

 


你可能感兴趣的:(安卓)