2016-04-18 14 views
1

Ich habe eine Recyclerview mit einigen Daten und ich habe eine Searchview, und Filter funktioniert gut. Aber das Entfiltern funktioniert nicht. Ich kann nicht alle Daten in der Recycleransicht nach dem Unfilter abrufen. Es werden keine Daten angezeigt. Ich muss die Aktivität erneut öffnen, um Daten zu erhalten. Ich habe versucht, zwei Datensätze zu verwenden. Aber ich habe keine Ahnung, wo ich sie benutzen soll.Un-Filterung des Ergebnisses funktioniert nicht in Recyclerview

Mein Fragment.

public class YourDealerListFragment extends Fragment { 
    // TODO: Rename parameter arguments, choose names that match 
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER 
    private static final String ARG_PARAM1 = "param1"; 
    private static final String ARG_PARAM2 = "param2"; 
    private static final String STATE_DEALER_LIST = "state_dealer_list"; 

    // TODO: Rename and change types of parameters 
    private String mParam1; 
    private String mParam2; 
    private VollySingleton vollySingleton; 
    private RequestQueue requestQueue; 
    private RecyclerView recyclerView; 
    private DealerListAdapter dlAdapter; 
    private HashMap<String, String> hashMap; 
    private ArrayList<SuggestGetSet> dealerList = new ArrayList<>(); 
    private ArrayList<SuggestGetSet> filteredDealerList = new ArrayList<>(); 
    private String repNo; 
    private StaggeredGridLayoutManager staggeredGridLayoutManager; 
    private GridMenuFragment mGridMenuFragment; 
    private Toolbar toolbar; 
    private ItemSorter itemSorter; 
    private Button sortButton; 
    private SearchView searchView; 
    private ProgressView progressView; 
    public static List<String> disChannel; 


    public YourDealerListFragment() { 
     // Required empty public constructor 
    } 

    /** 
    * Use this factory method to create a new instance of 
    * this fragment using the provided parameters. 
    * 
    * @param param1 Parameter 1. 
    * @param param2 Parameter 2. 
    * @return A new instance of fragment YourDealerListFragment. 
    */ 
    // TODO: Rename and change types and number of parameters 
    public static YourDealerListFragment newInstance(String param1, String param2) { 
     YourDealerListFragment fragment = new YourDealerListFragment(); 
     Bundle args = new Bundle(); 
     args.putString(ARG_PARAM1, param1); 
     args.putString(ARG_PARAM2, param2); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (getArguments() != null) { 
      mParam1 = getArguments().getString(ARG_PARAM1); 
      mParam2 = getArguments().getString(ARG_PARAM2); 
     } 
     vollySingleton = VollySingleton.getsInstance(); 
     requestQueue = vollySingleton.getmRequestQueue(); 


    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_your_dealer_list, container, false); 
     recyclerView = (RecyclerView) view.findViewById(R.id.dealerListRecyclerView); 
     progressView = (ProgressView) view.findViewById(R.id.pViewew); 
     itemSorter = new ItemSorter(); 
     dlAdapter = new DealerListAdapter(); 
     disChannel = new ArrayList<String>(); 

     repNo = UserLogIn.getRepNo(); 

     if (savedInstanceState != null) { 
      dealerList = savedInstanceState.getParcelableArrayList(STATE_DEALER_LIST); 
      dlAdapter.setDealertList(dealerList); 
     } else { 
      getJsonRequest(); 
     } 

     final FrameLayout frameLayout = (FrameLayout) view.findViewById(R.id.frame_layout); 
     frameLayout.getBackground().setAlpha(0); 
     final FloatingActionsMenu fabMenu = (FloatingActionsMenu) view.findViewById(R.id.fab_menu); 
     final FloatingActionButton fabName = (FloatingActionButton) view.findViewById(R.id.fab_name); 
     final FloatingActionButton fabCollection = (FloatingActionButton) view.findViewById(R.id.fab_collection); 

     fabName.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       onSortByName(); 
       fabMenu.collapse(); 
      } 
     }); 

     fabMenu.setOnFloatingActionsMenuUpdateListener(new FloatingActionsMenu.OnFloatingActionsMenuUpdateListener() { 
      @Override 
      public void onMenuExpanded() { 
       frameLayout.getBackground().setAlpha(240); 
       frameLayout.setOnTouchListener(new View.OnTouchListener() { 
        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
         fabMenu.collapse(); 
         return true; 
        } 
       }); 
      } 

      @Override 
      public void onMenuCollapsed() { 
       frameLayout.getBackground().setAlpha(0); 
       frameLayout.setOnTouchListener(null); 
      } 
     }); 

     searchView = (SearchView) view.findViewById(R.id.dealerNameSearchView); 
     searchView.setOnQueryTextListener(listener); 

     //custom context menu 
     mGridMenuFragment = GridMenuFragment.newInstance(R.drawable.background); 
     setupGridMenu(); 


     mGridMenuFragment.setOnClickMenuListener(new GridMenuFragment.OnClickMenuListener() { 
      @Override 
      public void onClickMenu(GridMenu gridMenu, int position) { 
       switch (position) { 
        case 0: 
         Intent intent = new Intent(getActivity(), SelectItem.class); 
         getActivity().finish(); 
         startActivity(intent); 
         getActivity(); 
         break; 
       } 
      } 
     }); 

     //dealers' recycler view item click 
     recyclerView.addOnItemTouchListener(new NavigationDrawerFragment.RecycleTouchListner(getActivity(), recyclerView, new NavigationDrawerFragment.ClickListener() { 
      @Override 
      public void onClick(View view, int position) { 
       FragmentTransaction tx = getActivity().getSupportFragmentManager().beginTransaction(); 
       tx.replace(R.id.main_frame, mGridMenuFragment); 
       tx.addToBackStack(null); 
       tx.commit(); 

      } 
     })); 


     return view; 
    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 

     super.onViewCreated(view, savedInstanceState); 
     setHasOptionsMenu(true); 

     recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
     staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL); 
     recyclerView.setLayoutManager(staggeredGridLayoutManager); 

     final ArrayList<SuggestGetSet> filteredModelList = new ArrayList<>(); 

     for (SuggestGetSet movie : filteredModelList) { 
      filteredModelList.add(movie); 
     } 

     dlAdapter = new DealerListAdapter(filteredModelList, getActivity()); 
     recyclerView.setAdapter(dlAdapter); 

    } 

    //search dealer from search view 
    SearchView.OnQueryTextListener listener = new SearchView.OnQueryTextListener() { 

     @Override 
     public boolean onQueryTextSubmit(String s) { 
      return false; 

     } 

     @Override 
     public boolean onQueryTextChange(String s) { 
      final ArrayList<SuggestGetSet> filteredModelList = filter(dealerList, s); 
      dlAdapter.animateTo(filteredModelList); 
      recyclerView.scrollToPosition(0); 
      return true; 
     } 
    }; 

    private ArrayList<SuggestGetSet> filter(ArrayList<SuggestGetSet> models, String query) { 
     query = query.toLowerCase(); 

     final ArrayList<SuggestGetSet> filteredModelList = new ArrayList<>(); 
     for (SuggestGetSet model : models) { 
      final String text = model.getName().toLowerCase(); 
      if (text.contains(query)) { 
       filteredModelList.add(model); 
      } 
     } 
     return filteredModelList; 
    } 

    //custom context menu data 
    private void setupGridMenu() { 
     List<GridMenu> menus = new ArrayList<>(); 
     menus.add(new GridMenu("Order", R.drawable.nnn)); 
     menus.add(new GridMenu("Banking", R.drawable.n)); 
     menus.add(new GridMenu("Credit Note", R.drawable.nn)); 
     menus.add(new GridMenu("Cheques", R.drawable.nnnn)); 
     menus.add(new GridMenu("Invoice Dispatch", R.drawable.nnnnn)); 
     menus.add(new GridMenu("Goods Return", R.drawable.nnnnnn)); 

     mGridMenuFragment.setupMenu(menus); 
    } 


    private void getJsonRequest() { 
     progressView.start(); 

     final SQLiteHandler sqLiteHandler = new SQLiteHandler(getActivity().getApplicationContext()); 
     Cursor cr = sqLiteHandler.getData(sqLiteHandler); 
     cr.moveToFirst(); 

     do { 
      repNo = cr.getString(0); 
     } while (cr.moveToNext()); 
     cr.close(); 

     CustomJsonObjectRequest request = new CustomJsonObjectRequest(Request.Method.POST, AppConfig.URL_JSON_DEALER_LIST, hashMap, new Response.Listener<JSONObject>() { 


      @Override 
      public void onResponse(JSONObject response) { 
       progressView.stop(); 

       try { 
        JSONObject jsonObject = new JSONObject(String.valueOf(response)); 
        if (jsonObject.names().get(0).equals("feed")) { 
         dealerList = parseJsonResponse(response); 
         dlAdapter.setDealertList(dealerList); 

         JSONArray arrayAchSum = response.getJSONArray("feedd"); 
         for (int i = 0; i < arrayAchSum.length(); i++) { 
          JSONObject obj3 = arrayAchSum.getJSONObject(i); 
          String a = obj3.getString("dis_channel"); 
          disChannel.add(a); 
         } 
        } else { 
         Toast.makeText(getActivity(), "No Dealers Available", Toast.LENGTH_SHORT).show(); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
       /*dealerList = parseJsonResponse(response); 
       dlAdapter.setDealertList(dealerList);*/ 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 

      } 
     }) { 
      protected Map<String, String> getParams() throws AuthFailureError { 
       hashMap = new HashMap<String, String>(); 
       hashMap.put("repNo", repNo); 
       return hashMap; 
      } 
     }; 
     requestQueue.add(request); 
     request.setRetryPolicy(new DefaultRetryPolicy(15 * 1000, 0, 
       DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
    } 

    private ArrayList<SuggestGetSet> parseJsonResponse(JSONObject response) { 
     ArrayList<SuggestGetSet> groupList = new ArrayList<>(); 
     if (response != null || response.length() > 0) { 

      try { 

       JSONArray arrayDelaers = response.getJSONArray(KEY_FEED_NAME); 

       for (int i = 0; i < arrayDelaers.length(); i++) { 
        JSONObject currentObject = arrayDelaers.getJSONObject(i); 
        String rep = currentObject.getString(KEY_REP_ID); 
        String name = currentObject.getString(KEY_REP_NAME); 
        String dealerId = currentObject.getString(KEY_DEALER_ID); 

        SuggestGetSet delaers = new SuggestGetSet(); 
        delaers.setId(rep); 
        delaers.setName(name); 
        delaers.setDealerId(dealerId); 

        groupList.add(delaers); 

       } 
       //Toast.makeText(getApplicationContext(), productList.toString(), Toast.LENGTH_LONG).show(); 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 

     return groupList; 
    } 

    public void onSortByName() { 
     itemSorter.sortItemByName(dealerList); 
     dlAdapter.notifyDataSetChanged(); 

    } 

    public static interface ClickListener { 
     public void onClick(View view, int position); 

     //public void onLongClick(View view, int position); 

    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putParcelableArrayList(STATE_DEALER_LIST, dealerList); 
    } 
} 

Meine Adapterklasse.

public class DealerListAdapter extends RecyclerView.Adapter<DealerListAdapter.ViewHolderDealerList> { 
    private LayoutInflater layoutInflater; 
    public Context mcontext; 
    private List<SuggestGetSet> dealerArrayList; 
    private List<SuggestGetSet> originalDealerArrayList; 
    Typeface type; 
    private static String selectedRepId, selectedDealerId, selectedDealerName; 

    public DealerListAdapter() { 
    } 

    public DealerListAdapter(Context context) { 

     layoutInflater = LayoutInflater.from(context); 
     type = Typeface.createFromAsset(context.getAssets(), "helvr.ttf"); 
    } 

    public static String getDealerName() { 
     return selectedDealerName; 
    } 

    public static String getDealerID() { 
     return selectedDealerId; 
    } 

    public static String getRepID() { 
     return selectedRepId; 
    } 

    public DealerListAdapter(ArrayList<SuggestGetSet> dList, Context context) { 
     this.mcontext = context; 
     layoutInflater = LayoutInflater.from(context); 
     dealerArrayList = new ArrayList<>(dList); 
     originalDealerArrayList = new ArrayList<>(dList); 
     type = Typeface.createFromAsset(context.getAssets(), "helvr.ttf"); 
    } 

    public void setDealertList(ArrayList<SuggestGetSet> dealerAList) { 
     this.dealerArrayList = dealerAList; 
     originalDealerArrayList = new ArrayList<>(dealerAList); 
     notifyItemRangeChanged(0, dealerArrayList.size()); 
    } 

    @Override 
    public ViewHolderDealerList onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = layoutInflater.inflate(R.layout.custom_dealer_list_layout, parent, false); 
     ViewHolderDealerList viewHolderDealerList = new ViewHolderDealerList(view); 
     return viewHolderDealerList; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolderDealerList holder, int position) { 
     final SuggestGetSet model = dealerArrayList.get(position); 
     holder.bind(model); 

     final int pos = position; 

     holder.dealerName.setText(dealerArrayList.get(position).getName()); 
     holder.dealerName.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       selectedDealerId = dealerArrayList.get(pos).getDealerId(); 
       selectedRepId = dealerArrayList.get(pos).getId(); 
       selectedDealerName = dealerArrayList.get(pos).getName(); 

       Toast.makeText(layoutInflater.getContext(), dealerArrayList.get(pos).getName() + "/" + dealerArrayList.get(pos).getDealerId() + "/" + dealerArrayList.get(pos).getId(), Toast.LENGTH_LONG).show(); 
      } 
     }); 


    } 

    @Override 
    public int getItemCount() { 
     return dealerArrayList.size(); 
    } 

    public void setModels(ArrayList<SuggestGetSet> models) { 
     dealerArrayList = new ArrayList<>(models); 
    } 

    static class ViewHolderDealerList extends RecyclerView.ViewHolder { 
     private TextView dealerName, dealerId; 

     public ViewHolderDealerList(View itemView) { 
      super(itemView); 
      dealerName = (TextView) itemView.findViewById(R.id.yourDelaerName); 
      //dealerId = (TextView) itemView.findViewById(R.id.txtDelaerCollection); 
     } 

     public void bind(SuggestGetSet model) { 
      dealerName.setText(model.getName()); 
     } 

    } 

    //search animations 
    public SuggestGetSet removeItem(int position) { 
     final SuggestGetSet model = dealerArrayList.remove(position); 
     notifyItemRemoved(position); 
     return model; 
    } 

    public void addItem(int position, SuggestGetSet model) { 
     dealerArrayList.add(position, model); 
     notifyItemInserted(position); 
    } 

    public void moveItem(int fromPosition, int toPosition) { 
     final SuggestGetSet model = dealerArrayList.remove(fromPosition); 
     dealerArrayList.add(toPosition, model); 
     notifyItemMoved(fromPosition, toPosition); 
    } 

    public void animateTo(ArrayList<SuggestGetSet> models) { 
     applyAndAnimateRemovals(models); 
     applyAndAnimateAdditions(models); 
     applyAndAnimateMovedItems(models); 
    } 

    private void applyAndAnimateMovedItems(ArrayList<SuggestGetSet> models) { 
     for (int toPosition = dealerArrayList.size() - 1; toPosition >= 0; toPosition--) { 
      final SuggestGetSet model = dealerArrayList.get(toPosition); 
      final int fromPosition = models.indexOf(model); 
      if (fromPosition >= 0 && fromPosition != toPosition) { 
       moveItem(fromPosition, toPosition); 
      } 
     } 
     notifyDataSetChanged(); 
    } 

    private void applyAndAnimateAdditions(ArrayList<SuggestGetSet> models) { 
     for (int i = 0, count = dealerArrayList.size(); i < count; i++) { 
      final SuggestGetSet model = dealerArrayList.get(i); 
      if (!models.contains(model)) { 
       addItem(i, model); 
      } 
     } 
     notifyDataSetChanged(); 
    } 

    private void applyAndAnimateRemovals(ArrayList<SuggestGetSet> models) { 
     for (int i = dealerArrayList.size() - 1; i >= 0; i--) { 
      final SuggestGetSet model = dealerArrayList.get(i); 
      if (!models.contains(model)) { 
       removeItem(i); 
      } 
     } 
     notifyDataSetChanged(); 

    } 

} 
+2

http://www.tutorialsbuzz.com/2015/11/Android-Filter-RecyclerView-Using-SearchView-In-ToolBar.html – Pavya

+0

Ich weiß nicht, wie ich Ihnen danken . Es funktionierte. Tolles Zeug. Vielen Dank. –

+0

willkommen :) .... – Pavya

Antwort

0

einfach Ihre Funktion ändern und hinzufügen Check für null oder "". es wird funktionieren

private ArrayList<SuggestGetSet> filter(ArrayList<SuggestGetSet> models, String query) { 

     if(TextUtils.isEmpty(query)){ 
      return models; 
     } 
     query = query.toLowerCase(); 

     final ArrayList<SuggestGetSet> filteredModelList = new ArrayList<>(); 
     for (SuggestGetSet model : models) { 
      final String text = model.getName().toLowerCase(); 
      if (text.contains(query)) { 
       filteredModelList.add(model); 
      } 
     } 
     return filteredModelList; 
    } 
+0

immer noch nicht funktioniert Bruder. –

+0

Sie müssen Suche leer machen, dann wird es funktionieren –

+0

http://StackOverflow.com/Questions/30398247/How-To-Filter-Arecyclerview-with-Asearchviewhere auch das gleiche Problem aufgetreten ist. Sie schlagen vor, einen doppelten Datensatz zu führen. Ich weiß nicht, wie ich das gebrauchen soll. –

Verwandte Themen