{"id":176,"date":"2020-03-16T16:41:51","date_gmt":"2020-03-16T08:41:51","guid":{"rendered":"https:\/\/badgameshow.com\/fly\/?p=176"},"modified":"2020-05-19T14:33:29","modified_gmt":"2020-05-19T06:33:29","slug":"util-%e6%a8%a1%e7%b3%8a%e6%90%9c%e5%b0%8badapter","status":"publish","type":"post","link":"https:\/\/badgameshow.com\/fly\/util-%e6%a8%a1%e7%b3%8a%e6%90%9c%e5%b0%8badapter\/","title":{"rendered":"Util \u6a21\u7cca\u641c\u5c0bAdapter"},"content":{"rendered":"<pre><code class=\"language-Java line-numbers\">import android.content.Context;\nimport android.util.Log;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.BaseAdapter;\nimport android.widget.Filter;\nimport android.widget.Filterable;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class SearchPupItenAdapter&lt;T&gt; extends BaseAdapter implements Filterable {\n\n    private List&lt;T&gt; mObjects;\n    private final Object mLock = new Object();\n    private int mResource;\n    private int mDropDownResource;\n    private int mFieldId = 0;\n    private boolean mNotifyOnChange = true;\n    private Context mContext;\n    private ArrayList&lt;T&gt; mOriginalValues;\n    private ArrayFilter mFilter;\n    private LayoutInflater mInflater;\n\n    public SearchPupItenAdapter(Context context, int resource, List&lt;T&gt; objects) {\n        init(context, resource, 0, objects);\n    }\n\n    @Override\n    public void notifyDataSetChanged() {\n        super.notifyDataSetChanged();\n        mNotifyOnChange = true;\n    }\n\n    private void init(Context context, int resource, int textViewResourceId, List&lt;T&gt; objects) {\n        mContext = context;\n        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);\n        mResource = mDropDownResource = resource;\n        mObjects = objects;\n        mFieldId = textViewResourceId;\n    }\n\n    public int getCount() {\n        return mObjects.size();\n    }\n\n    public T getItem(int position) {\n        return mObjects.get(position);\n    }\n\n    public long getItemId(int position) {\n        return position;\n    }\n\n    public View getView(int position, View convertView, ViewGroup parent) {\n        return createViewFromResource(position, convertView, parent, mResource);\n    }\n\n    private View createViewFromResource(int position, View convertView, ViewGroup parent, int resource) {\n        View view;\n        TextView text;\n\n        if (convertView == null) {\n            view = mInflater.inflate(resource, parent, false);\n        }\n        else {\n            view = convertView;\n        }\n\n        try {\n            if (mFieldId == 0) {\n\n                text = (TextView) view;\n            }\n            else {\n                text = (TextView) view.findViewById(mFieldId);\n            }\n        } catch (ClassCastException e) {\n            Log.e(\"ArrayAdapter\", \"You must supply a resource ID for a TextView\");\n            throw new IllegalStateException(\"ArrayAdapter requires the resource ID to be a TextView\", e);\n        }\n\n        T item = getItem(position);\n        if (item instanceof CharSequence) {\n            text.setText((CharSequence) item);\n        }\n        else {\n            text.setText(item.toString());\n        }\n\n        return view;\n    }\n\n    @Override\n    public View getDropDownView(int position, View convertView, ViewGroup parent) {\n        return createViewFromResource(position, convertView, parent, mDropDownResource);\n    }\n\n    public Filter getFilter() {\n        if (mFilter == null) {\n            mFilter = new ArrayFilter();\n        }\n        return mFilter;\n    }\n\n    private class ArrayFilter extends Filter {\n        @Override\n        protected FilterResults performFiltering(CharSequence prefix) {\n            FilterResults results = new FilterResults();\n\n            if (mOriginalValues == null) {\n                synchronized (mLock) {\n                    mOriginalValues = new ArrayList&lt;T&gt;(mObjects);\n                }\n            }\n\n            if (prefix == null || prefix.length() == 0) {\n                ArrayList&lt;T&gt; list;\n                synchronized (mLock) {\n                    list = new ArrayList&lt;T&gt;(mOriginalValues);\n                }\n                results.values = list;\n                results.count = list.size();\n            }\n            else {\n                String prefixString = prefix.toString().toLowerCase();\n\n                ArrayList&lt;T&gt; values;\n                synchronized (mLock) {\n                    values = new ArrayList&lt;T&gt;(mOriginalValues);\n                }\n\n                final int count = values.size();\n                final ArrayList&lt;T&gt; newValues = new ArrayList&lt;T&gt;();\n\n                for (int i = 0; i &lt; count; i++) {\n                    final T value = values.get(i);\n                    final String valueText = value.toString().toLowerCase();\n\n                    if (valueText.startsWith(prefixString)) {\n                        newValues.add(value);\n                    }\n                    else {\n                        final String[] words = valueText.split(\" \");\n                        final int wordCount = words.length;\n                        for (int k = 0; k &lt; wordCount; k++) {\n                            if (words[k].indexOf(prefixString) != -1) {\n                                newValues.add(value);\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                results.values = newValues;\n                results.count = newValues.size();\n            }\n\n            return results;\n        }\n\n        @Override\n        protected void publishResults(CharSequence constraint, FilterResults results) {\n            mObjects = (List&lt;T&gt;) results.values;\n            if (results.count &gt; 0) {\n                notifyDataSetChanged();\n            }\n            else {\n                Toast.makeText(mContext, \"\u6c92\u6709\u6578\u64da\", Toast.LENGTH_SHORT).show();\n                notifyDataSetInvalidated();\n\n            }\n        }\n\n    }\n}\n<\/code><\/pre>\n\n<div style=\"font-size: 0px; height: 0px; line-height: 0px; margin: 0; padding: 0; clear: both;\"><\/div>","protected":false},"excerpt":{"rendered":"<p>import android.content.Context; import android.util.Log &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[9],"tags":[13,14,16],"class_list":["post-176","post","type-post","status-publish","format-standard","hentry","category-util","tag-android","tag-java","tag-util"],"_links":{"self":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/176","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/comments?post=176"}],"version-history":[{"count":3,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/176\/revisions"}],"predecessor-version":[{"id":496,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/176\/revisions\/496"}],"wp:attachment":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/media?parent=176"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/categories?post=176"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/tags?post=176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}