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

现在说一下自定义监听器的第二种方法。

1、新建应用程序

2、定义接口Spy,同上一篇。

package com.test.leetlelistener2;

public interface Spy {

	public void Listening();

}

3、定义类Enemy

package com.test.leetlelistener2;

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、定义监听类Leader,它代替上一中方法的MainActivity实现接口Spy

package com.test.leetlelistener2;

public class Leader implements Spy{

	@Override
	public void Listening() {
		System.out.println("SpyClass Listening()");
	}

}

5、MainActivity

package com.test.leetlelistener2;

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

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 
        Enemy enemy=new Enemy();
        enemy.setSpy(new Leader());  
    }

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

6、运行,10s后Logcat可以查看到有

SpyClass Listening()

的输出,这个我没有写关闭程序的处理,主要就是看下使用其他的类实现Spy接口的效果。

那么,两个例子一对比,就可以看出来自定义监听需要注意的点有哪些了。

下面做个小结:

1、要监听什么事件?(接口Spy及其方法,此例中要监听的事件是10s计时结束)

2、被监听的对象是谁?(Enemy,会发生要被监听的事件--10s)

3、谁是监听事件的接受者?即监听事件发生后要向谁报告?(implements Spy的类,本文中的Leader,上一篇文中的MainActivity)

4、何时何处设置监听器?(这个视情况而定,因为只是示例一下,所以我都是直接在程序开始的时候就设置了监听和启动计时器等操作,在实际的编程过程中,不管是设置监听还是监听到事件后通知给监听者,一般都有条件/触发事件的。另外,有的时候监听是需要传递一些参数的,这个时候可以通过给接口Spy中的方法设置参数来实现这样的操作。另外,还有一种类似状态这样的监听,我们可能需要用字符串或者某个数字表示某一种特定的情况或者状态。比如,在连连看中,当游戏的状态发生了变化,需要监听器传递一个参数表示游戏状态为——赢了、超时等,我们可能会将这两个状态分别定义为1和2.1表示赢了,2表示超时,但是这样做的话,后期的修改会比较困难,比如我要加一个状态,未超时但无路可走的情况,这样就要加一个3,加一个还好,如果还有其他的,再去修改就比较费心。后来我的处理方式就是在Spy接口中定义一些静态变量表示游戏的状态,每次只要按照变量名的语义设置就可以了,而且修改也会方便很多。可能这样处理会比较笨吧?但是,也算是解决了一部分问题,至少如果我半年后再读或者修改我写的这段代码,不会太困难。)

像下面这样:

package com.test.leetlelistener2;

public interface Spy {

	public static int GAME_WIN=1;
	public static int GAME_OVERTIME=2;
	public static int GAME_DIE=3;
	public void Listening(int gameStatus);

}

把之前的代码中,Listening的定义和调用加一下参数就可以了。

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

2014.12.30

李颜翎

时间: 2024-10-23 15:53:38

安卓应用-自定义监听器2的相关文章

安卓应用-自定义对话框

现在要说的是自定义对话框. 常用的对话框有好多网友们整理的资料,对话框大全啊神马的.但是除了常用对话框外,有时候要根据自己的需求定义新的对话框,下面就稍微说一下自定义对话框的一种做法. 1.需要一个对话框内容的xml配置文件game_dialog.xml,这个应该不需要过多解释,基本布局而已. 有几个图片按钮,所以在drawable下面放几张图,嫌麻烦的话,也可以用Button替换,看下效果. 需要说明的是,所有控件的id这里我都用的@id,因为id我都写在了res/values/ids.xml

【安卓】自定义基于onDraw的任意动画(不仅仅是平移/旋转/缩放/alpha)、!

思路: 1.基于时间的显示映射.如:给定度数,显示圆弧,加上时序,即可有圆弧动画的效果 2.给定时序.用于驱动动画的一帧帧绘制 方案一.基于ObjectAnimator.动画运作时会调用degree对应set函数(基于放射调用),即setDegree. ObjectAnimator ani=ObjectAnimator.ofInt(myView, "degree", 0,300); ani.start(); 注:1>混编后,默认会将setDegree混掉,导致找不到函数,故混编后

安卓Toast自定义及防止重复显示

Toast是安卓系统中,用户误操作时或某功能执行完毕时,对用户的一种提示,它没有焦点,并在一定时间内会消失,但用户连续误操作(如登录时,密码错误)多次时,则会有多个Toast被创建,系统会把这些toast放进队列中,等待上个Toast 显示完毕,接着显示下一个,那么用户则会看到多次Toast提示,无论你退出软件与否,这样给用户的体验则大打折扣,所以我们需要做的是,若Toast已在显示(也就是Toast!=null)时,就不用再重新new了,直接setText要显示的信息即可,只有Toast为空时

SpringBoot自定义监听器

[问题]实现ApplicationListener接口和实现SmartApplicationListener 接口?  实现ApplicationListener接口针对单一事件监听 实现SmartApplicationListener 接口针对多种事件监听 其它注意: Order值越小越优先执行 使用application.properties中定义的优于其它方式 [问题]如何自定义监听器?  一.实现方式1 1.创建监听器类FirstListener.java @Order(1) publi

安卓日记——自定义按钮效果

安卓原生的按钮是多么丑,效果是多么单调,大家也是有目共睹的. 要做一个APP少不了使用按钮,一个好看的按钮少不了好看的效果和外表 这次主要跟大家讲讲如何用drawable的xml文件弄一些好看的自定义样式 首先是外表 在APP中四四方方,灰色底黑色字的按钮是很难看的,我们希望看到的是圆角,彩色,白字(根据你的个人审美也可以是其他样式). 首先是在layout里新建一个按钮 然后在drawable文件夹里新建一个drawable resource file 不妨起名为shape 加一个select

[安卓后端] 自定义保存Session数据

简介: Android开发中需要处理Session的场景自己还是毕竟少见,就是有一次项目的后端竟然要保持Session,因为他们登陆接口不返回Token之类的身份识别字串,真的是坑啊! 其实了解了解后端的基础知识,例如Session的概念,对应安卓开发也是大有裨益的.如果能了解后端基础知识,这样就更好的和后端开发人员进行沟通. 在PHP开发偶尔会遇到需要保存Session数据到数据库的要求,大多也是为了实现Session共享,自己简单的实践了PHP的自定义保存Session功能,用起来还是非常方

安卓的自定义的DemoApplication 出现的问题。

项目中实现了DemoApplication这自定义的类 来存储一些公共用的属性如:用户id和密码和用户名之类的.但是在其他的Activity 调用的时候 一般会出现个问题.如果将这个东西在用的地方写上实例获取到DemoApplication app= (DemoApplication) getApplicationContext(); 这个 然后在下面调用.   这个我是写在一个for循环里面.然后出现一个不能智能提示的问题.不能提升类的次方法.点不出来关键字.把这个东西放到oncreat 这个

spring 自定义监听器

一.基于spring监听器,在web.xml配置 二.放入collection,在需要的地方调用 1.interface: public interface UUMSyncExceptionListener { void uumEmpSyncExceptionOccur(); void uumOrgSyncExceptionOccur(); void uumRelationExceptionOccur(List<String> relationDatas);} 2.实现interface类,提

安卓中自定义并使用Volley框架请求网络

大家好,今天我们讲一下如何使用Volley框架请求网络,为何要使用Volley框架,这就要先说一下使用Volley框架请求网络的优点了,volley是易于定制的,即你可以根据需求来设定volley框架,还有volley框架支持请求的优先级设定,即你可以自主设定网络请求的优先级,还有就是volley框架请求支持取消单个或多个请求,这个一会设置请求的时候会特别说明,还有它可以自动调度网络请求,至于其他的如代码的健壮性.支持多并发等等就不一一列举了,说了那么多下面就介绍如何自定义并使用Volley框架