From a52a0cf69b8a71d30c1ab284706cbe459b15fb5a Mon Sep 17 00:00:00 2001 From: Sky Date: Mon, 9 Nov 2015 10:47:22 +0800 Subject: [PATCH] fix setOnItemClickListener --- .../betterspinner/sample/MainActivity.java | 11 +++++ .../material/MaterialBetterSpinner.java | 48 ++++++++----------- .../betterspinner/library/BetterSpinner.java | 41 ++++++---------- 3 files changed, 45 insertions(+), 55 deletions(-) diff --git a/app/src/main/java/com/weiwangcn/betterspinner/sample/MainActivity.java b/app/src/main/java/com/weiwangcn/betterspinner/sample/MainActivity.java index 1a7bae8..17423aa 100644 --- a/app/src/main/java/com/weiwangcn/betterspinner/sample/MainActivity.java +++ b/app/src/main/java/com/weiwangcn/betterspinner/sample/MainActivity.java @@ -6,7 +6,10 @@ import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; import android.widget.ArrayAdapter; +import android.widget.Toast; import com.weiwangcn.betterspinner.R; import com.weiwangcn.betterspinner.library.BetterSpinner; @@ -38,6 +41,14 @@ protected void onCreate(Bundle savedInstanceState) { spinner1.setAdapter(adapter); spinner2.setAdapter(adapter); + AdapterView.OnItemClickListener listener = new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Toast.makeText(MainActivity.this, parent.getAdapter().getItem(position).toString(), Toast.LENGTH_SHORT).show(); + } + }; + spinner1.setOnItemClickListener(listener); + spinner2.setOnItemClickListener(listener); } diff --git a/library-material/src/main/java/com/weiwangcn/betterspinner/library/material/MaterialBetterSpinner.java b/library-material/src/main/java/com/weiwangcn/betterspinner/library/material/MaterialBetterSpinner.java index 673dee9..1967c2d 100644 --- a/library-material/src/main/java/com/weiwangcn/betterspinner/library/material/MaterialBetterSpinner.java +++ b/library-material/src/main/java/com/weiwangcn/betterspinner/library/material/MaterialBetterSpinner.java @@ -6,34 +6,25 @@ import android.support.v4.content.ContextCompat; import android.util.AttributeSet; import android.view.MotionEvent; -import android.view.View; import android.view.inputmethod.InputMethodManager; -import android.widget.AdapterView; import com.rengwuxian.materialedittext.MaterialAutoCompleteTextView; -import java.util.Calendar; +public class MaterialBetterSpinner extends MaterialAutoCompleteTextView { -public class MaterialBetterSpinner extends MaterialAutoCompleteTextView implements AdapterView.OnItemClickListener { - - private static final int MAX_CLICK_DURATION = 200; - private long startClickTime; private boolean isPopup; public MaterialBetterSpinner(Context context) { super(context); - setOnItemClickListener(this); } - public MaterialBetterSpinner(Context arg0, AttributeSet arg1) { - super(arg0, arg1); - setOnItemClickListener(this); + public MaterialBetterSpinner(Context context, AttributeSet attrs) { + super(context, attrs); } - public MaterialBetterSpinner(Context arg0, AttributeSet arg1, int arg2) { - super(arg0, arg1, arg2); - setOnItemClickListener(this); + public MaterialBetterSpinner(Context context, AttributeSet attrs, int style) { + super(context, attrs, style); } @Override @@ -60,22 +51,14 @@ protected void onFocusChanged(boolean focused, int direction, public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: { - startClickTime = Calendar.getInstance().getTimeInMillis(); - break; - } case MotionEvent.ACTION_UP: { - long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime; - if (clickDuration < MAX_CLICK_DURATION) { - if (isPopup) { - dismissDropDown(); - isPopup = false; - } else { - requestFocus(); - showDropDown(); - isPopup = true; - } + if (isPopup) { + dismissDropDown(); + } else { + requestFocus(); + showDropDown(); } + break; } } @@ -83,7 +66,14 @@ public boolean onTouchEvent(MotionEvent event) { } @Override - public void onItemClick(AdapterView adapterView, View view, int i, long l) { + public void showDropDown() { + super.showDropDown(); + isPopup = true; + } + + @Override + public void dismissDropDown() { + super.dismissDropDown(); isPopup = false; } diff --git a/library/src/main/java/com/weiwangcn/betterspinner/library/BetterSpinner.java b/library/src/main/java/com/weiwangcn/betterspinner/library/BetterSpinner.java index 7377c2f..d53246e 100644 --- a/library/src/main/java/com/weiwangcn/betterspinner/library/BetterSpinner.java +++ b/library/src/main/java/com/weiwangcn/betterspinner/library/BetterSpinner.java @@ -6,32 +6,23 @@ import android.support.v4.content.ContextCompat; import android.util.AttributeSet; import android.view.MotionEvent; -import android.view.View; import android.view.inputmethod.InputMethodManager; -import android.widget.AdapterView; import android.widget.AutoCompleteTextView; -import java.util.Calendar; +public class BetterSpinner extends AutoCompleteTextView { -public class BetterSpinner extends AutoCompleteTextView implements AdapterView.OnItemClickListener { - - private static final int MAX_CLICK_DURATION = 200; - private long startClickTime; private boolean isPopup; public BetterSpinner(Context context) { super(context); - setOnItemClickListener(this); } public BetterSpinner(Context arg0, AttributeSet arg1) { super(arg0, arg1); - setOnItemClickListener(this); } public BetterSpinner(Context arg0, AttributeSet arg1, int arg2) { super(arg0, arg1, arg2); - setOnItemClickListener(this); } @Override @@ -58,22 +49,14 @@ protected void onFocusChanged(boolean focused, int direction, public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: { - startClickTime = Calendar.getInstance().getTimeInMillis(); - break; - } case MotionEvent.ACTION_UP: { - long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime; - if (clickDuration < MAX_CLICK_DURATION) { - if (isPopup) { - dismissDropDown(); - isPopup = false; - } else { - requestFocus(); - showDropDown(); - isPopup = true; - } + if (isPopup) { + dismissDropDown(); + } else { + requestFocus(); + showDropDown(); } + break; } } @@ -81,7 +64,14 @@ public boolean onTouchEvent(MotionEvent event) { } @Override - public void onItemClick(AdapterView adapterView, View view, int i, long l) { + public void showDropDown() { + super.showDropDown(); + isPopup = true; + } + + @Override + public void dismissDropDown() { + super.dismissDropDown(); isPopup = false; } @@ -94,5 +84,4 @@ public void setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, } super.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom); } - }