java - 如何将查询传递给 FirestoreRecyclerOptions?

标签 java android firebase google-cloud-firestore firebaseui

我正在使用 FirestoreRecyclerAdapter 在 recyclerView 中显示我的项目。 使用 searchView,我可以创建查询:

querySearch = FirebaseFirestore.getInstance()
                   .collection("App").document(" " + userID).collection("reminders")
                   .startAt("title", newText)
                   .endAt("title", newText+"\uf8ff");

我的问题是,如何将查询传递给 FirestoreRecyclerOptions 以便我的 recyclerView 显示我正在搜索的内容?

(我正在使用 Cloud Firestore)

编辑:这是我更新的代码

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
       @Override
       public boolean onQueryTextSubmit(String query) {
           return false;
       }

       @Override
       public boolean onQueryTextChange(String newText) {


           querySearch = FirebaseFirestore.getInstance()
                   .collection("App").document(" " + userID).collection("reminders")
                   .orderBy(newText);


           FirestoreRecyclerOptions<Reminder> options = new FirestoreRecyclerOptions.Builder<Reminder>()
                   .setQuery(querySearch, Reminder.class)
                   .build();


           //create new FirestoreRecyclerAdapter:
           adapterSearch = new FirestoreRecyclerAdapter<Reminder, ReminderHolder>(options) {
               @Override
               public void onBindViewHolder(final ReminderHolder holder, int position, final Reminder model) {

                   holder.bind(model);
                   holder.itemView.setOnClickListener(new View.OnClickListener() {
                       @Override
                       public void onClick(View view) {

                           openEditPopup();

                           DocumentSnapshot snapshot = getSnapshots().getSnapshot(holder.getAdapterPosition());
                           docID = snapshot.getId();

                       }
                   });
               }

               @Override
               public ReminderHolder onCreateViewHolder(ViewGroup group, int i) {
                   View view = LayoutInflater.from(group.getContext()).inflate(R.layout.item_beta, group, false); //todo use beta item layout
                   return new ReminderHolder(view);
               }
           };

           recyclerView.setAdapter(adapterSearch);
           adapterSearch.startListening(); //connects to firebase collection
           adapterSearch.notifyDataSetChanged();

最佳答案

您需要使用FirebaseUI for Cloud Firestore为了能够使用类 FirestoreRecyclerOptions,请在 build.gradle 文件中添加以下依赖项:

implementation 'com.google.firebase:firebase-firestore:17.0.4'
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.firebaseui:firebase-ui-firestore:4.1.0'

然后你可以执行以下操作:

querySearch = FirebaseFirestore.getInstance()
               .collection("App").document(" " + userID).collection("reminders")
               .startAt("title", newText)
               .endAt("title", newText+"\uf8ff"); 


FirestoreRecyclerOptions<ModelClass.class> options = new FirestoreRecyclerOptions.Builder<ModelClass.class>()
    .setQuery(querySearch, ModelClass.class)
    .build();

另请检查docs .

关于java - 如何将查询传递给 FirestoreRecyclerOptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51574169/

相关文章:

android MediaPlayer - MediaPlayer 上的 illegalstateException

angularjs - 当对象包含 ng-repetate 时,如何使用 angularFire 保存 Firebase 对象 $asArray()

java - 在 ActiveMQ 中使用 Spring Integration JMS 实现发布订阅

java - 在 Android Studio 中从布局自动创建对象

android - 在android资源中定义具有不同内容但结构相同的字符串包

从 GooglePlay 下载的 Android apk 在固件 4.1.1 更新后崩溃

ios - 如何在 FCM 中使用 apns-collapse-id?

angular - 即使在 AngularFire2 的 Firebase 存储中取消上传任务后,快照状态仍为 'running'

java - 重复验证错误

java - Spring + hibernate : manually commit the transaction at end