Browse Source

解决商机-商机跟进页面模糊搜索bug

RaoMeng 9 years ago
parent
commit
e073b4a35e

+ 81 - 46
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/crm/BusinessStateActivity.java

@@ -154,14 +154,16 @@ public class BusinessStateActivity extends BaseActivity implements View.OnClickL
             public void onTextChanged(CharSequence s, int start, int before, int count) {
             public void onTextChanged(CharSequence s, int start, int before, int count) {
                 if (!StringUtils.isEmpty(search_edit.getText().toString())) {
                 if (!StringUtils.isEmpty(search_edit.getText().toString())) {
                     mAdapter.getFilter().filter(search_edit.getText().toString());
                     mAdapter.getFilter().filter(search_edit.getText().toString());
-                } else {
+                }else {
                     mAdapter.getFilter().filter("");
                     mAdapter.getFilter().filter("");
                 }
                 }
             }
             }
 
 
             @Override
             @Override
             public void afterTextChanged(Editable s) {
             public void afterTextChanged(Editable s) {
-
+//                if (!StringUtils.isEmpty(search_edit.getText().toString())) {
+//                    mAdapter.getFilter().filter(search_edit.getText().toString());
+//                }
             }
             }
         });
         });
     }
     }
@@ -194,8 +196,8 @@ public class BusinessStateActivity extends BaseActivity implements View.OnClickL
             model.setType(type);
             model.setType(type);
             mData.add(model);
             mData.add(model);
         }*/
         }*/
-        mAdapter = new BussinessDetailAdapter(this, mData);
-        mlist.setAdapter(mAdapter);
+//        mAdapter = new BussinessDetailAdapter(this, mData);
+//        mlist.setAdapter(mAdapter);
 
 
     }
     }
 
 
@@ -228,8 +230,11 @@ public class BusinessStateActivity extends BaseActivity implements View.OnClickL
 
 
     private class BussinessDetailAdapter extends BaseAdapter implements Filterable {
     private class BussinessDetailAdapter extends BaseAdapter implements Filterable {
         private Context ct;
         private Context ct;
-        private ArrayList<Business> mdata = new ArrayList<>();
+        private ArrayList<Business> mdata;
         private LayoutInflater inflater;
         private LayoutInflater inflater;
+        private MyFilter myFilter;
+        private ArrayList<Business> mOrignalValues;
+        private final Object mLock = new Object();
 
 
         public BussinessDetailAdapter(Context ct, ArrayList<Business> data) {
         public BussinessDetailAdapter(Context ct, ArrayList<Business> data) {
             this.ct = ct;
             this.ct = ct;
@@ -239,12 +244,22 @@ public class BusinessStateActivity extends BaseActivity implements View.OnClickL
 
 
         @Override
         @Override
         public int getCount() {
         public int getCount() {
-            return mdata.size();
+            if (mdata == null){
+                return 0;
+            }else {
+                return mdata.size();
+
+            }
         }
         }
 
 
         @Override
         @Override
         public Object getItem(int position) {
         public Object getItem(int position) {
-            return mdata.get(position);
+            if (mdata == null){
+                return null;
+            }else {
+                return mdata.get(position);
+
+            }
         }
         }
 
 
         @Override
         @Override
@@ -308,45 +323,10 @@ public class BusinessStateActivity extends BaseActivity implements View.OnClickL
 
 
         @Override
         @Override
         public Filter getFilter() {
         public Filter getFilter() {
-            return new Filter() {
-                @Override
-                protected FilterResults performFiltering(CharSequence constraint) {
-                    //过滤数据
-                    FilterResults searchResults = new FilterResults();
-
-                    if (constraint == null || constraint.length() == 0){
-                        searchResults.values=mData;
-                        searchResults.count=mData.size();
-                    }else{
-                        ArrayList<Business> newBusiness=new ArrayList<>();
-                        for (Business business:mdata){
-                            String num=business.getNum();
-                            String name=business.getName();
-                            String source=business.getSource();
-                            String links=business.getPhone();
-                            String remark=business.getNote();
-                            String date=business.getDate();
-                            if (num.contains(constraint)||name.contains(constraint)||source.contains(constraint)
-                                    ||links.contains(constraint)||remark.contains(constraint)||date.contains(constraint))
-                            {
-                                newBusiness.add(business);
-                            }
-                        }
-                        searchResults.values=newBusiness;
-                        searchResults.count=newBusiness.size();
-                    }
-                    return searchResults;
-                }
-
-                @Override
-                protected void publishResults(CharSequence constraint, FilterResults results) {
-                    mdata= (ArrayList<Business>) results.values;
-                    if (mAdapter.getCount() == 0) {
-
-                    }
-                    notifyDataSetChanged();
-                }
-            };
+            if (myFilter == null){
+                myFilter = new MyFilter();
+            }
+            return myFilter;
         }
         }
 
 
 
 
@@ -365,6 +345,60 @@ public class BusinessStateActivity extends BaseActivity implements View.OnClickL
         }
         }
 
 
 
 
+        class MyFilter extends Filter{
+            @Override
+            protected FilterResults performFiltering(CharSequence constraint) {
+                //过滤数据
+                FilterResults searchResults = new FilterResults();
+                if (mOrignalValues == null){
+                    synchronized (mLock){
+                        mOrignalValues = new ArrayList<Business>(mdata);
+                    }
+                }
+                if (constraint == null || constraint.length() == 0){
+                    synchronized (mLock){
+                        ArrayList<Business> tempList = new ArrayList<>(mOrignalValues);
+                        searchResults.values=tempList;
+                        searchResults.count=tempList.size();
+
+                    }
+                }else{
+                    final ArrayList<Business> values = mOrignalValues;
+                    final int count = values.size();
+
+                    final ArrayList<Business> newBusiness=new ArrayList<>(count);
+
+                    for (Business business: values){
+                        String num=business.getNum();
+                        String name=business.getName();
+                        String source=business.getSource();
+                        String links=business.getPhone();
+                        String remark=business.getNote();
+                        String date=business.getDate();
+                        if (num.contains(constraint)||name.contains(constraint)||source.contains(constraint)
+                                ||links.contains(constraint)||remark.contains(constraint)||date.contains(constraint))
+                        {
+                            newBusiness.add(business);
+                        }
+                    }
+                    searchResults.values=newBusiness;
+                    searchResults.count=newBusiness.size();
+                }
+                return searchResults;
+            }
+
+            @Override
+            protected void publishResults(CharSequence constraint, FilterResults results) {
+                mdata= (ArrayList<Business>) results.values;
+                if (mAdapter.getCount() > 0) {
+                    notifyDataSetChanged();
+                }else {
+                    notifyDataSetInvalidated();
+                }
+            }
+        }
+
+
     }
     }
 
 
 
 
@@ -430,6 +464,7 @@ public class BusinessStateActivity extends BaseActivity implements View.OnClickL
                     }
                     }
                     mAdapter = new BussinessDetailAdapter(ct, mData);
                     mAdapter = new BussinessDetailAdapter(ct, mData);
                     mlist.setAdapter(mAdapter);
                     mlist.setAdapter(mAdapter);
+//                    mAdapter.notifyDataSetChanged();
                     if (page!=1) {
                     if (page!=1) {
                         mlist.getRefreshableView().setSelection(mAdapter.getCount());
                         mlist.getRefreshableView().setSelection(mAdapter.getCount());
                     }
                     }