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);}


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;@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