轉載請注明出處:http://www.cnblogs.com/cnwutianhao/p/6694072.html
在做App的過程中,當點擊某個按鈕的時候,如果不做連點處理,會造成按鈕在短時間內被點擊多次的情況。
為了避免這種情況的發生,我們需要自定義一個抽象類 CustomClickListener 並繼 View.OnClickListener
abstract class CustomClickListener implements View.OnClickListener { private static final int MIN_CLICK_DELAY_TIME = 1000; // 設置1秒內只能點擊一次 private long lastClickTime = 0; private int id = -1; @Override public void onClick(View v) { long currentTime = Calendar.getInstance().getTimeInMillis(); int mId = v.getId(); if (id != mId) { id = mId; lastClickTime = currentTime; onNoDoubleClick(v); return; } if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) { lastClickTime = currentTime; onNoDoubleClick(v); } } protected abstract void onNoDoubleClick(View v); }
本文采用Data-Binding框架,So 在build.gradle(Module:app)下面添加
android {
...
dataBinding {
enabled = true
}
}
將連點處理寫入到需要實現的類里面
public class MainActivity extends AppCompatActivity { private ActivityMainBinding mBinding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mBinding = DataBindingUtil.setContentView(this,R.layout.activity_main); mBinding.btn.setOnClickListener(new CustomClickListener() { @Override protected void onNoDoubleClick(View v) { // TODO:你想執行的操作 } }); } }
布局文件
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <RelativeLayout xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.tnnowu.android.perfectclick.MainActivity"> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </RelativeLayout> </layout>