Реализация поискового просмотра с переработчиком просмотра - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь реализовать вид поиска, который будет откатывать всех учащихся, которые соответствуют введенному тексту. В настоящий момент он делает это, но когда текст поискового запроса удаляется или добавляется другое значение, он ничего не показывает, так как список пуст, и я не уверен, где он идет не так. Я пытался использовать adapter.updateData (список), но все еще ничего.

Фрагмент

 @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        // Do something that differs the Activity's menu here
        MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView)searchItem.getActionView();
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }
            @Override
            public boolean onQueryTextChange(String newText) {
                System.out.println("before" + list);
                adapter.getFilter().filter(newText);
                System.out.println("after" + list);
                return false;
            }

        });

    }
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mView= inflater.inflate(R.layout.fragment_show_sightings_open,container,false);
        recycle=(RecyclerView)mView.findViewById(R.id.recycler);
        recycle.setHasFixedSize(true);
        recycle.setLayoutManager(new LinearLayoutManager(getContext()));
        adapter = new RecyclerViewAdapter(getActivity(), list);
        recycle.setAdapter(adapter);
        mDatabase = FirebaseDatabase.getInstance().getReference().child("Names");

        mDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
                for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
                    New studentDetails = dataSnapshot.getValue(New.class);
                    Map<String, String> map = (Map) dataSnapshot.getValue();
                    String message = map.get("name");
                    if(message.equals("name"))
                    {
                        list.add(studentDetails);
                    }

                }

                //tried using adapter.updateData(list) not working either
                adapter.notifyDataSetChanged();


            }

Адаптер

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> implements Filterable {

    Context context;
    ArrayList<New> arrayList;
    ArrayList<New> arrayListFiltered;

    public RecyclerViewAdapter(Context context, ArrayList<New> arrayList ) {
        this.arrayList  = arrayList ;
        this.arrayListFiltered = new ArrayList<>(arrayList);
        this.context = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, parent, false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {

        New studentDetails = arrayList.get(position);
        holder.setTitle(studentDetails.getType().toString());

    }
    @Override
    public int getItemCount() {

        return arrayList.size();
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public Filter getFilter() {
        return exampleFilter;
    }

    private Filter exampleFilter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            List<New> filteredList = new ArrayList<>();

            if(constraint == null || constraint.length()==0)
            {
                filteredList.addAll(arrayListFiltered);
            }
            else
            {
                String filterPattern = constraint.toString().toLowerCase().trim();

                for(New item: arrayListFiltered)
                {
                    if(item.getType().toString().toLowerCase().contains(filterPattern))
                    {
                        filteredList.add(item);
                    }
                }
            }
            FilterResults results= new FilterResults();
            results.values = filteredList;

            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {

            arrayList.clear();
            arrayList.addAll((List)results.values);
            notifyDataSetChanged();

        }
    };


    public void updateData(ArrayList<New> myData){
        arrayListFiltered = myData;
        notifyDataSetChanged();
    }
...