2016-04-18 4 views
1

私はいくつかのデータを持つrecyclerviewを持っています。私はsearchviewを持っており、フィルタは正常に機能しています。しかし、フィルタリングを解除すると動作しません。私はun-filterの後にrecyclerviewの全データを得ることができません。データが表示されません。私はデータを取得するためにアクティビティを再度開く必要があります。私は2つのデータセットを使用しようとしました。しかし、どこで使うのか分かりません。Recyclerviewで結果をアンフィルタリングしていません

マイファragment。

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); 
    } 
} 

マイアダプタークラスです。

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

私はあなたに感謝する方法がわかりません。出来た。素晴らしいもの。どうもありがとうございました。 –

+0

歓迎:) .... – Pavya

答えて

0

ちょうどあなたの機能を変更し、ヌルまたは""のチェックを追加します。 それが正常に動作します

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

まだ弟が働いていない。 –

+0

あなたはそれが –

+0

http://stackoverflow.com/questions/30398247/how-to-filter-a-recyclerview-with-a-searchviewhereも同じ問題が発生している動作します検索は、空のようにする必要があります。彼らは重複データセットを保持することを提案している。私はそれを使う方法を知らない。 –

関連する問題