Firebase Recycler视图中的Searchview为空

问题描述 投票:1回答:1

我正在实现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;
    }
java firebase android-recyclerview firebaseui
1个回答
0
投票

尝试一下,放入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
}
© www.soinside.com 2019 - 2024. All rights reserved.