Think4Android(二)之Button
来源:互联网 发布:网络系统集成书籍 编辑:程序博客网 时间:2024/06/05 06:26
预览一下:
Android中的按钮是继承之TextView的,今天想了一会儿怎么对按钮进行一些点击上的优化或者说是定制吧。原理是自定义一个抽象的‘监听器’实现我们的OnClickListener然后在重写的onClick里面根据不同的业务逻辑来调用我们所定制的Click事件(即一个抽象的方法)
-Think For Button
--1.Button怎么样做到防止多次点击多次触发一个事件,特别是网络请求时应该注意的问题
--2.Button的双击事件的实现
--3.Button的在有网络和无网络情况下对用户的反馈
--4.Button的点击事件的个性化制定
1.防止多次触发
import android.view.View;import android.view.View.OnClickListener;public abstract class OnFastClickListener implements OnClickListener {// 防止快速点击默认等待时长为1100ms private long DELAY_TIME = 1100; private static long lastClickTime; private boolean isFastDoubleClick() { long time = System.currentTimeMillis(); long timeD = time - lastClickTime; if (0 < timeD && timeD < DELAY_TIME) { return true; } lastClickTime = time; return false; } @Override public void onClick(View v) { // 判断当前点击事件与前一次点击事件时间间隔是否小于阈值 if (isFastDoubleClick()) { return; } onFastClick(v); } /** * 设置默认快速点击事件时间间隔 * @param delay_time * @return */ public OnFastClickListener setLastClickTime(long delay_time) { this.DELAY_TIME = delay_time; return this; } /** * 快速点击事件回调方法 * @param v */ public abstract void onFastClick(View v);}
2.按钮的双击事件
import android.view.View;import android.view.View.OnClickListener;public abstract class OnDoubleClickListener implements OnClickListener {private long DELAY_TIME = 900; private static long lastClickTime; private boolean isFastDoubleClick() { long time = System.currentTimeMillis(); long timeD = time - lastClickTime; if (0 < timeD && timeD < DELAY_TIME) { return true; } lastClickTime = time; return false; } @Overridepublic void onClick(View v) {if (isFastDoubleClick()) {onFastClick(v); }}public abstract void onFastClick(View v);}
import android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.view.View;import android.view.View.OnClickListener;public abstract class OnNetworkClickListener implements OnClickListener { @Override public void onClick(View v) { boolean isNetworkOk = isNetworkConnected(v.getContext()); if (isNetworkOk) { onNetworkClick(v); } else { onNoNetworkClick(v); } } //有网络 public abstract void onNetworkClick(View v); //没有网络 public abstract void onNoNetworkClick(View v); /** * 网络连接是否正常 * * @param context * @return */ public static boolean isNetworkConnected(Context context) { if (context != null) { ConnectivityManager mConnectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo(); if (mNetworkInfo != null) { return mNetworkInfo.isAvailable(); } } return false; }}
4.定制个性化的点击事件
import android.view.View;import android.view.View.OnClickListener;public abstract class OnMyClickListener implements OnClickListener {private boolean isRight;@Overridepublic void onClick(View v) {isRight = isLeftOrRight();if(isRight){doRight(v);}else{doLeft(v);}}public abstract boolean isLeftOrRight();public abstract void doLeft(View v);public abstract void doRight(View v);}
MainActivity.java
private Button btn1,btn2,btn3,btn4;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);setupView();}private void setupView() {btn1 = (Button) findViewById(R.id.btn1);btn2 = (Button) findViewById(R.id.btn2);btn3 = (Button) findViewById(R.id.btn3);btn4 = (Button) findViewById(R.id.btn4);//防止快速点击触发多次的按钮btn1.setOnClickListener(new OnFastClickListener() {@Overridepublic void onFastClick(View v) {Toast.makeText(MainActivity.this, "快速点击按钮被点击", Toast.LENGTH_SHORT).show();}});//监听双击的按钮btn2.setOnClickListener(new OnDoubleClickListener() {@Overridepublic void onFastClick(View v) {Toast.makeText(MainActivity.this, "按钮双击事件触发", Toast.LENGTH_SHORT).show();}});//检测网络情况的按钮btn3.setOnClickListener(new OnNetworkClickListener() {@Overridepublic void onNoNetworkClick(View v) {Toast.makeText(MainActivity.this, "当前没有网络,请检查网络是否正常", Toast.LENGTH_SHORT).show();}@Overridepublic void onNetworkClick(View v) {Toast.makeText(MainActivity.this, "当前网络情况正常", Toast.LENGTH_SHORT).show();}});//自定义个性化事件btn4.setOnClickListener(new OnMyClickListener() {@Overridepublic boolean isLeftOrRight() {//根据奇数月和偶数月的不同来执行,当然也可以不是2个分枝,也可以是多个分枝Date d = new Date();int m = d.getMonth()+1;if(m*2 == 0) return true;else return false;}@Overridepublic void doRight(View v) {Toast.makeText(MainActivity.this, "当前月份是偶数月", Toast.LENGTH_SHORT).show();}@Overridepublic void doLeft(View v) {Toast.makeText(MainActivity.this, "当前月份是奇数月", Toast.LENGTH_SHORT).show();}});}源码在这儿下载
0 0
- Think4Android(二)之Button
- Think4Android(一)之TextView
- Android控件之二 (Button)
- VS2010/MFC编程入门之二十一(常用控件:按钮控件Button、Radio Button和Check Box)
- VS2010/MFC编程入门之二十一(常用控件:按钮控件Button、Radio Button和Check Box)
- VS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)
- VS2013/MFC编程入门之二十一(常用控件:按钮控件Button、Radio Button和Check Box)
- C++ MFC / VS2013 之二十(常用控件:按钮控件Button、Radio Button和Check Box)
- cocos2d-C++ 学习UI控件(二)之 菜单项实现Button|CheckButton
- 学习ExtJS(二) Button常用方法
- 按钮控件 Button Controls(二)
- 学习ExtJS(二) Button常用方法
- 学习Button按钮控件(二)
- ugui基础控件button使用(二)
- HTML 事件解说之二 Button Link CheckBox Select
- button按钮的四种监听之二
- 安卓控件之按钮(Button)
- Android:基础控件之(一)Button
- jQuery效果(一)——隐藏/显示
- uC/OS-II内核架构解析---uC/OS-II内存管理
- adb权限加入root用户组
- spark streaming的NetworkWordCount实例理解
- TestNG入门笔记[6]:TestNG-xslt 美化测试报告
- Think4Android(二)之Button
- 文章标题
- iOS开发An unknown error occurred.真机调试
- 闪回(1)-flashback query
- uC/OS-II内核架构解析---uC/OS-II应用开发
- Mysql ERROR 2002 (HY000)错误解决
- 统计学习方法---决策树之ID3算法
- 提取字符数组的唯一值
- WAS SystemOut.log SECJ0384E com.ibm.ws.security.web.TAMTrustAssociationInterceptorPlus -1