解决Android中多次点击启动多个相同界面的问题
在Android开发过程中我们经常会碰到这样的问题,当用户点击一个View启动一个新的Activity的时候,如果快速地多次点击就会启动多个相同的界面。虽然说很少会有用户这么玩自己的手机,但是一旦出现这样的情况确实是很不好的体验。刚好前段时间研究过lanchmode,那我们把要启动的Acitivity改为singleTop,这样最上面只能有一个相同的界面,问题应该解决了吧?实验了一下,只能说基本满足要求了,但是有一些特殊情况如使用startActivityForResult启动的时候还是不好用。下面来一劳永逸地解决这个问题吧。
首页,在项目中我们要创建一个父类Activity,就叫FatherActivity吧,实践证明,项目中使用这么一个父类真是好处多多啊,在这里就不一一列举了。然后需要重写一下父类的dispatchTouchEvent方法,仅仅需要几行代码。思想就是每次有按下的事件的时候做一下时间间隔的判断,如果是快速点击就直接拦截下来。
点击(此处)折叠或打开
- @Override
- public boolean dispatchTouchEvent(MotionEvent ev) {
- if (ev.getAction() == MotionEvent.ACTION_DOWN) {
- if (Util.isFastDoubleClick()) {
- return true;
- }
- }
- return super.dispatchTouchEvent(ev);
- }
对于快速点击的判断,我们可以自己定义想要的事件间隔,在这里我定义的是一秒钟:
点击(此处)折叠或打开
- public static boolean isFastDoubleClick() {
- long time = System.currentTimeMillis();
- long timeD = time - lastClickTime;
- lastClickTime = time;
- return truetimeD <= 1000;
- }
最后只要让所有的Activity都继承FatherActivity就可以了。
解决Android中多次点击启动多个相同界面的问题的更多相关文章
- 解决Android中多次点击(快速点击多次 )启动多个相同界面的问题
通过以下代码可以解决这个问题. /** * 防止快速点击 * @param ev * @return */ @Override public boolean dispatchTouchEvent(Mo ...
- 解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题
解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题http ...
- Android中ListView无法点击
Android中ListView无法点击 转自:http://xqjay19910131-yahoo-cn.iteye.com/blog/1319502 问题描述: ListView中Item加入 ...
- 如何快速排查解决Android中的内存泄露问题
概述 内存泄露是Android开发中比较常见的问题,一旦发生会导致大量内存空间得不到释放,可用内存急剧减少,导致运行卡顿,部分功能不可用甚至引发应用crash.对于复杂度比较高.多人协同开发的项目来讲 ...
- Android中Activity的四种启动方式
谈到Activity的启动方式必须要说的是数据结构中的栈.栈是一种只能从一端进入存储数据的线性表,它以先进后出的原则存储数据,先进入的数据压入栈底,后进入的数据在栈顶.需要读取数据的时候就需要从顶部开 ...
- 缓存AsimpleCache -- 解决Android中Sharedpreferences无法存储List数据/ASimpleCache
Sharedpreferences想必大家在项目中都经常会用到,但是如果需要在本地需要存储比较多的数据,存储一个集合的时,发现Sharedpreferences并不 是那么好使了. 分析 如果需要在本 ...
- 解决Android中图片圆角——.9图
目录: 一.问题概述 二..9图介绍 三..9图制作 1.开发工具 2.打开图片 3.制作图片 4.保存图片 一.问题概述 在html开发中,可以通过设置css的border-radius来设置圆角 ...
- Android中Activity的四种启动模式
要了解Android的启动模式先要了解一下Activity的管理方式: 1.Activity的管理机制 Android的管理主要是通过Activity栈来进行的.当一个Activity启动时,系统根据 ...
- 在android中如何通过点击edittext之外的部分使软键盘隐藏
我们知道在android中点击edittext框就会自动弹出软键盘,那怎么通过点击edittext之外的部分使软键盘隐藏呢?(微信聊天时的输入框就是这个效果,这个给用户的体验还是很不错的) 首先我们要 ...
随机推荐
- java byte转无符号int
import java.io.ByteArrayInputStream; public class Test{ public static void main(String[] args) { byt ...
- List与字符串转换
1.将list元素用单引号引起来:List<TransferFocusxfSummaryTop3> topList = getTransferFocusxfSummaryTop3(user ...
- 115、定时器(TimerTask+Timer+Handler)
public class TimerUtils { public static Activity act; public static List<MaiDianModels> listMa ...
- Action<T1, T2>委托
封装包含两个参数的方法委托,没有返回值. 语法 public delegate void Action<in T1, in T2>( T1 arg1, T2 arg2 ) 类型参数 in ...
- javascript--关于错误
错误是一定会发生,所以语言都会有自己的错误处理机制.javascript的错误处理机制,关乎throw.try.catch. try 语句允许我们定义在执行时进行错误测试的代码块. catch 语句允 ...
- oracle中的case when then else end 用法
Case when 的用法,简单Case函数 简单CASE表达式,使用表达式确定返回值. 语法: CASE search_expression WHEN expression1 THEN result ...
- Asp.net 怎样去除表单多行文本框滚动条
<textarea style="overflow:hidden;border-width:0px;">永远没有滚动条</textarea><text ...
- shell字符串判空
主要用到两个命令 -n -z if [ -n "$PID" ]; then echo "PID is not empty" fi if[ -z "$ ...
- mysql与oracle的存储过程有什么区别?
MySQL存储过程 (1). 格式 MySQL存储过程创建的格式:CREATE PROCEDURE过程名 ([过程参数[,...]]) [特性 ...]过程体 案例分析: 参数 MySQL存储过程的参 ...
- 30、shiro框架入门2,关于Realm
1.Jdbc的Realm链接,并且获取权限 首先创建shiro-jdbc.ini的配置文件,主要配置链接数据库的信息 配置文件中的内容如下所示 1.变量名=全限定类名会自动创建一个类实例 2.变量名. ...