Think4Android(二)之Button

预览一下:

       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;
    }
    
	@Override
	public void onClick(View v) {
		if (isFastDoubleClick()) {
			onFastClick(v);
        }
	}

	public abstract void onFastClick(View v);
		

}


3.按钮不同网络下的点击事件

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;
	@Override
	public 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;
	@Override
	protected 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() {
			@Override
			public void onFastClick(View v) {
				Toast.makeText(MainActivity.this, "快速点击按钮被点击", Toast.LENGTH_SHORT).show();
			}
		});
		//监听双击的按钮
		btn2.setOnClickListener(new OnDoubleClickListener() {
			@Override
			public void onFastClick(View v) {
				Toast.makeText(MainActivity.this, "按钮双击事件触发", Toast.LENGTH_SHORT).show();
			}
		});
		//检测网络情况的按钮
		btn3.setOnClickListener(new OnNetworkClickListener() {
			@Override
			public void onNoNetworkClick(View v) {
				Toast.makeText(MainActivity.this, "当前没有网络,请检查网络是否正常", Toast.LENGTH_SHORT).show();
			}
			@Override
			public void onNetworkClick(View v) {
				Toast.makeText(MainActivity.this, "当前网络情况正常", Toast.LENGTH_SHORT).show();
			}
		});
		//自定义个性化事件
		btn4.setOnClickListener(new OnMyClickListener() {
			@Override
			public boolean isLeftOrRight() {
				//根据奇数月和偶数月的不同来执行,当然也可以不是2个分枝,也可以是多个分枝
				Date d = new Date();
				int m = d.getMonth()+1;
				if(m*2  == 0) return true;
				else return false;
			}
			
			@Override
			public void doRight(View v) {
				Toast.makeText(MainActivity.this, "当前月份是偶数月", Toast.LENGTH_SHORT).show();
			}
			
			@Override
			public void doLeft(View v) {
				Toast.makeText(MainActivity.this, "当前月份是奇数月", Toast.LENGTH_SHORT).show();
			}
		});
	}
源码在这儿下载

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值