Вид поиска в представлении Firebase Recycler пуст - PullRequest
1 голос
/ 30 января 2020

Я реализую earchview, чтобы отфильтровать мои данные из firebase. При загрузке этого действия страница загружается, и я вижу карточки, но когда я нажимаю на строку поиска, действие становится пустым, так как представление рециркулятора пустое. Если я удаляю "recyclerView.setAdapter (firebaseRecyclerAdapter);" из функции поиска данные снова видны, но фильтр не работает.

Создать

@Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.show);

        recyclerView=(RecyclerView)findViewById(R.id.myRecycleView);
        recyclerView.setHasFixedSize(true);
        mDatabase = FirebaseDatabase.getInstance().getReference().child("Reference");
        mDatabase.keepSynced(true);

        options= new FirebaseRecyclerOptions.Builder<New>().setQuery(mDatabase, New.class).build();
        firebaseRecyclerAdapter=new FirebaseRecyclerAdapter<New, ViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull ViewHolder viewHolder, int i, @NonNull New model) {

                viewHolder.setTitle(model.getType().toString());
                viewHolder.setImage(model.getUri(),getApplicationContext());
              //  viewHolder.setSeverity(model.getSeverity().toString());
                viewholder.setLocation(getApplicationContext(),model.getLongitude(),model.getLatitude());
                viewHolder.setDate(model.getTime());
                viewHolder.setBrief(model.getBrief());
            }

            @NonNull
            @Override
            public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(Display.this).inflate(R.layout.sighting_rows, parent, false);

                return new ViewHolder(view);
            }
        };

        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(firebaseRecyclerAdapter);
    }

Функция поиска

private void search(String searchText)
    {
        Query newQuery = mDatabase.child("Reference").orderByChild("type").startAt(searchText).endAt(searchText + "\uf8ff");

        options= new FirebaseRecyclerOptions.Builder<New>().setQuery(newQuery, New.class).build();
        firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<New, Viewholder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull ViewHolder viewHolder, int position, @NonNull New model) {
                viewHolder.setTitle(model.getType().toString());
                viewHolder.setImage(model.getUri(),getApplicationContext());
                //  viewHolder.setSeverity(model.getSeverity().toString());
                viewHolder.setLocation(getApplicationContext(),model.getLongitude(),model.getLatitude());
                viewHolder.setDate(model.getTime());
                viewHolder.setBrief(model.getBrief());
            }

            @NonNull
            @Override
            public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(Display.this).inflate(R.layout.sighting_rows, parent, false);
                return new ViewHolder(view);
            }
        };
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(firebaseRecyclerAdapter);
    }

oncreateoptionsmenu

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.searchsightings, menu);
        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) {
                Log.e("Search",newText);

                search(newText);

                return false;
            }
        });

        return true;
    }

1 Ответ

1 голос
/ 30 января 2020

Попробуйте это, поставьте startListening.

recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();

Измените это:

 View view = LayoutInflater.from(Display.this).inflate(R.layout.sighting_rows, parent, false);

На это:

 View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.sighting_rows, parent, false);

И измените его на true

@Override
public boolean onQueryTextChange(String newText) {
    Log.e("Search",newText);

    search(newText);

    return true; //true
}
...