监听器的实现方法

监听器的实现方法_第1张图片

监听器的接口又很多种,如OnClickListener,OnCheckedChangeListener……但由于以下是拿Button控件作为例子,因此代码中只用了OnClickListener接口举例,在实际开发中根据不同控件、不同的用户需求要使用不同的监听器接口。
默认已经写好了所有Activity对应的XML布局文件,因此在以下学习中不再放XML布局文件的代码,直接贴上Java代码

一、成员内部类实现监听器

package com.example.ui_button;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;


public class MainActivity extends Activity {
    private Button button;
/*
 * 为按钮添加监听器(成员内部类实现法)
 * 第一步:XML布局文件中添加Button控件并为其设置id
 * 第二步:在java代码中(需要显示该控件的Activity中),通过setContentView,装载Button所在的XML布局
 * 第三步:通过ID在Activity中获取Button的对象
 * 第四步:为button按钮添加监听事件
 *          a:创建内部类并实现OnClickListener接口
 *          b:重写onClick方法(当按钮被点击后想干什么)
 *          c:生成内部类对象
 *          d:将button按钮与监听器绑定(setOnClickListener(OnClickLisntener o))   
 */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //第二步
        setContentView(R.layout.inearlayout);
        //第三步
        button=(Button)findViewById(R.id.button01);
        //生成监听器对象
        MyButtonListener myButtonListener=new MyButtonListener();
        //将按钮与监听器绑定
        button.setOnClickListener(myButtonListener);
    }

    class MyButtonListener implements OnClickListener
    {
        @Override
        public void onClick(View arg0) 
        {
            //该方法将在绑定的按钮被点击时调用,传入的View对象为绑定的控件
            //吐司使用方法:三个参数分别为:当前活动对象、显示内容、吐司显示时长
            Toast.makeText(MainActivity.this, "按钮被点击啦", Toast.LENGTH_SHORT).show();//MainActivity.this指的就是MainActivity这个类的对象
        }
    }

}

二、匿名内部类实现监听器

package com.example.ui_button;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class SecondActivity extends Activity 
{
    /*
     * 第一步:获取Button对象
     * 第二步:直接调用button的setOnClickListener方法
     * a:在方法中直接传入new OnClickListener()
     * {
     *      public void onClick(View arg0)
     *      {
     *          重写内容
     *      }
     * }
     * 匿名内部类以及成员内部类这两种方式在开发中最常用
     */
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.inearlayout);
        button=(Button)findViewById(R.id.button01);
        //利用匿名内部类实现监听器与按钮绑定,由于接口OnClickListener是不能new的,因此这里相当于new了一个匿名实现OnClickListener接口的类,故称为匿名内部类
        button.setOnClickListener(new OnClickListener() 
        {

            @Override
            public void onClick(View arg0) 
            {
                Toast.makeText(SecondActivity.this, "啦啦啦~", Toast.LENGTH_LONG).show();//不要忘了.show()
            }
        });
    }
}

三、Activity实现监听器
Activity中的Java代码:

package com.example.ui_button;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

//第三种实现监听器的方式,直接让当前Acitivity实现OnClickListener接口
public class ThirdActivity extends Activity implements OnClickListener
{
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.inearlayout);
        button=(Button)findViewById(R.id.button01);
        button.setOnClickListener(this);//这里就直接传入ThirdActivity的对象就行了
    }
    @Override
    public void onClick(View arg0)
    {
        Toast.makeText(ThirdActivity.this, "咩咩咩~~", Toast.LENGTH_LONG).show();
    }
}

四、利用XML布局文件实现监听器

package com.example.ui_button;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class ForthActivity extends Activity 
{
    /*
     * 第一步:XML布局文件中,为button添加onClick属性
     * 第二步:在对应的Activity中,创建一个以onClick属性值为名字的方法
     *          a:该方法修饰符为public
     *          b:返回值为void
     *          c:传入参数为View类型
     * 
     */
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.inearlayout);
    }

    //注意方法要是public void型的,并且参数为View类型的对象,这个参数实际上就是被点击的Button的对象
    public void MyButtonClick(View v)
    {
        //将在button按钮被点击时调用
        Toast.makeText(ForthActivity.this, "hahaha", Toast.LENGTH_LONG).show();
    }
}

对应的XML布局文件:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    
    <Button
        android:id="@+id/button01" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮1"
        android:background="@color/blue"
        android:textColor="@color/cyan"
        android:onClick="MyButtonClick"
        android:layout_marginBottom="5dp"
        />
    <Button 
        android:id="@+id/button02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:text="按钮2"
        android:background="@color/cyan"
        />

LinearLayout>

五、如何利用一个监听器绑定多个控件实现不同的操作
该布局文件和四中的一样

package com.example.ui_button;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class SixthActivity extends Activity 
{
    //通过创建成员内部类为多个按钮添加一个监听器
    /*
     * 1、创建成员内部类实现OnClickListener接口
     * 2、onClick方法中,通过switch(R.id.xxx)方式区别当前被点击的按钮是哪个按钮
     * 之后再对相应的按钮做不同的处理
     */
    private Button button1,button2;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.inearlayout);
        button1=(Button)findViewById(R.id.button01);
        button2=(Button)findViewById(R.id.button02);
        ButtonListener buttonListener=new ButtonListener();
        button1.setOnClickListener(buttonListener);
        button2.setOnClickListener(buttonListener);
    }

    class ButtonListener implements OnClickListener
    {
        @Override
        public void onClick(View arg0) //传入的arg0其实就是按钮的对象
        {
            switch(arg0.getId())//根据传入的按钮对象执行不同的操作
            {
            case R.id.button01:Toast.makeText(SixthActivity.this, "第一个按钮", Toast.LENGTH_SHORT).show();break;
            case R.id.button02:Toast.makeText(SixthActivity.this, "第二个按钮", Toast.LENGTH_SHORT).show();break;
            }
        }
    }
}

你可能感兴趣的:(Android)