温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

安卓应用-自定义监听器1

发布时间:2020-06-11 22:09:48 来源:网络 阅读:1395 作者:sy月牙儿 栏目:开发技术

    这几天做个连连看游戏,是学校要求的“练手”产品,培训机构有给相关的资料,但是实在不合我的胃口,为了节省时间就下了个源码研究,然后自己去写写看。

    今天要说的就是,自定义监听器。

    开始的时候,完全搞不明白这到底是个神马东东,很神秘的感觉,做起来也好麻烦,然后就开始各种找资料看。

    最开始就是做完出效果,但是还是不太好理解,多做几个例子跟着程序走一遍就明白了。


    下面是我对监听器的理解:可以这么看,监听嘛,就是监视并报告,假设现在是两军对战,我军需要监视敌军的情况,那么就要在敌军中安插一个线人(奸细),然后告诉他有什么情况随时汇报,我方接到线人的回报后,再做出相应的对策。


    现在,做一个简单的小程序如下。定义一个包含计时器的类(敌),安插线人后计时10s,然后报告给我方,我方接到线人的报告后,退出程序。


1、新建一个安卓应用程序,全部默认就好

2、定义一个接口,叫Spy,这就是间谍。间谍就干一件事,Listening()。

package com.test.leetlelistener1;

public interface Spy {
	
	public void Listening();

}

3、定义地方阵营Enemy,并写一个计时器,一个setSpy(Spy s)方法,用来安插线人。

package com.test.leetlelistener1;

/**
 * 定义被监听的阵营
 * @author LEE
 *
 */
public class Enemy {

	public Spy spy;
	public int time = 10;
	Timer timer=new Timer();

	public void setSpy(Spy s) {
		this.spy = s;
		timer.start();
	}
	

	/**
	 * 定义计时器
	 * @author LEE
	 *
	 */
	class Timer extends Thread {
		@Override
		public void run() {
			super.run();
			while (time >= 0) {
				time--;
				try {
					Thread.sleep(500);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			spy.Listening();
		}
	}

}

4、让MainActivity implements线人接口。然后定义一个Enemy,并安插线人

package com.test.leetlelistener1;

import com.test.leetlelistener1.R;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity implements Spy {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		Enemy enemy = new Enemy();
		enemy.setSpy(this);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public void Listening() {
		System.out.println("MainActivity Listening()");
		System.exit(0);
	}

}


5、运行。10s后程序退出。

    这是最简单的自定义监听的例子,也比较容易理解,MainActivity自己当了间谍,安插到敌方,然后在10s后通知大本营退出程序就over了。

    我觉得这个比较神奇的就是,setSpy(MainActivity.this),这个设置的线人不是别的,正是implements了Spy的MainActivity自己,而setSpy(Spy s)的形参就是(Spy spy)。

    以前学基础知识的时候,会有接触过接口继承的东西,但是没这样子应用过,实践和理论还是蛮不一样的哈。

    关于Listening()方法,也可以为其设置参数,比如改成

public void Listening(int time)

    可以通过参数传递向大本营提供详细的情报信息。

    当然也可以设置很多个监听方法,用来表示不同的监听事件。



    另外不知道这个是不是观察者模式的一种应用呢?回去补一下设计模式。


    自定义监听器1到此结束!附上源码。


2014.12.28


附件:http://down.51cto.com/data/2365243
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI