|
35 | 35 | * See {@link GridViewWithHeaderAndFooter#addHeaderView(View, Object, boolean)}
|
36 | 36 | * See {@link GridViewWithHeaderAndFooter#addFooterView(View, Object, boolean)}
|
37 | 37 | */
|
38 |
| -public class GridViewWithHeaderAndFooter extends GridView implements android.widget.AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener { |
| 38 | +public class GridViewWithHeaderAndFooter extends GridView { |
39 | 39 |
|
40 | 40 | public static boolean DEBUG = false;
|
41 | 41 | private OnItemClickListener mOnItemClickListener;
|
@@ -70,6 +70,7 @@ private static class FixedViewInfo {
|
70 | 70 | private ArrayList<FixedViewInfo> mHeaderViewInfos = new ArrayList<FixedViewInfo>();
|
71 | 71 | private ArrayList<FixedViewInfo> mFooterViewInfos = new ArrayList<FixedViewInfo>();
|
72 | 72 | private ListAdapter mOriginalAdapter;
|
| 73 | + private ItemClickHandler mItemClickHandler; |
73 | 74 |
|
74 | 75 | private void initHeaderGridView() {
|
75 | 76 | }
|
@@ -418,6 +419,7 @@ public void setAdapter(ListAdapter adapter) {
|
418 | 419 |
|
419 | 420 | /**
|
420 | 421 | * Return original adapter for convenience.
|
| 422 | + * |
421 | 423 | * @return
|
422 | 424 | */
|
423 | 425 | public ListAdapter getOriginalAdapter() {
|
@@ -844,33 +846,43 @@ public void notifyDataSetChanged() {
|
844 | 846 | @Override
|
845 | 847 | public void setOnItemClickListener(OnItemClickListener l) {
|
846 | 848 | mOnItemClickListener = l;
|
847 |
| - super.setOnItemClickListener(this); |
| 849 | + super.setOnItemClickListener(getItemClickHandler()); |
848 | 850 | }
|
849 | 851 |
|
850 | 852 | @Override
|
851 | 853 | public void setOnItemLongClickListener(OnItemLongClickListener listener) {
|
852 | 854 | mOnItemLongClickListener = listener;
|
853 |
| - super.setOnItemLongClickListener(this); |
| 855 | + super.setOnItemLongClickListener(getItemClickHandler()); |
854 | 856 | }
|
855 | 857 |
|
856 |
| - @Override |
857 |
| - public void onItemClick(AdapterView<?> parent, View view, int position, long id) { |
858 |
| - if (mOnItemClickListener != null) { |
859 |
| - int resPos = position - getHeaderViewCount() * getNumColumnsCompatible(); |
860 |
| - if (resPos >= 0) { |
861 |
| - mOnItemClickListener.onItemClick(parent, view, resPos, id); |
862 |
| - } |
| 858 | + private ItemClickHandler getItemClickHandler() { |
| 859 | + if (mItemClickHandler == null) { |
| 860 | + mItemClickHandler = new ItemClickHandler(); |
863 | 861 | }
|
| 862 | + return mItemClickHandler; |
864 | 863 | }
|
865 | 864 |
|
866 |
| - @Override |
867 |
| - public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { |
868 |
| - if (mOnItemLongClickListener != null) { |
869 |
| - int resPos = position - getHeaderViewCount() * getNumColumnsCompatible(); |
870 |
| - if (resPos >= 0) { |
871 |
| - mOnItemLongClickListener.onItemLongClick(parent, view, resPos, id); |
| 865 | + private class ItemClickHandler implements android.widget.AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener { |
| 866 | + |
| 867 | + @Override |
| 868 | + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { |
| 869 | + if (mOnItemClickListener != null) { |
| 870 | + int resPos = position - getHeaderViewCount() * getNumColumnsCompatible(); |
| 871 | + if (resPos >= 0) { |
| 872 | + mOnItemClickListener.onItemClick(parent, view, resPos, id); |
| 873 | + } |
872 | 874 | }
|
873 | 875 | }
|
874 |
| - return true; |
| 876 | + |
| 877 | + @Override |
| 878 | + public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { |
| 879 | + if (mOnItemLongClickListener != null) { |
| 880 | + int resPos = position - getHeaderViewCount() * getNumColumnsCompatible(); |
| 881 | + if (resPos >= 0) { |
| 882 | + mOnItemLongClickListener.onItemLongClick(parent, view, resPos, id); |
| 883 | + } |
| 884 | + } |
| 885 | + return true; |
| 886 | + } |
875 | 887 | }
|
876 | 888 | }
|
0 commit comments