【发布时间】:2018-02-09 08:21:08
【问题描述】:
问题是调用 onchanged 方法后回收器视图不显示数据。否则,显示信息需要很长时间。代码如下:
public void onFilter(Filters filters) {
Query query = mFireStore.collection("Products");
// Category (equality filter)
if (filters.hasCategory()) {
query = query.whereEqualTo(Product.FIELD_CATEGORY, filters.getCategory());
}
// City (equality filter)
if (filters.hasCity()) {
query = query.whereEqualTo(Product.FIELD_CITY, filters.getCity());
}
// Price (equality filter)
if (filters.hasPrice()) {
query = query.whereEqualTo(Product.FIELD_PRICE, filters.getPrice());
}
// Sort by (orderBy with direction)
if (filters.hasSortBy()) {
query = query.orderBy(filters.getSortBy(), filters.getSortDirection());
}
// Limit items
query = query.limit(LIMIT);
Log.d("Query Info", query.toString());
FirestoreRecyclerOptions<Product> response = new FirestoreRecyclerOptions.Builder<Product>()
.setQuery(query,Product.class)
.build();
adapter = new FirestoreRecyclerAdapter<Product,ExploreViewholder>(response) {
@Override
public ExploreViewholder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycler_view_explore_item, parent, false);
return new ExploreViewholder(view);
}
@Override
protected void onBindViewHolder(@NonNull ExploreViewholder holder, int position, @NonNull Product model) {
holder.productName.setText(model.getProductName());
holder.creatorName.setText(mUser.getDisplayName());
holder.productDesc.setText(model.getProductDescription());
// Glide.with(getContext())
// .load(model.getProductImageUrl())
// .into(holder.productImage);
}
@Override
public void onError(FirebaseFirestoreException e) {
Log.e("error", e.getMessage());
}
};
adapter.notifyDataSetChanged();
mRecycler.setAdapter(adapter);
}
这是调用方法的地方,我从视图模型中获取数据,这没问题,但回收器视图会显示数据。
mViewModel.getMutableLiveData().observe(this, new Observer<Filters>() {
@Override
public void onChanged(@Nullable Filters filters) {
if (filters != null){
Log.d("ExploreFragObserver", filters.getCategory() + " ");
Log.d("ExploreFragObserver", filters.getCity() + "");
Log.d("ExploreFragObserver", filters.getSortBy() + " ");
Log.d("ExploreFragObserver", filters.getPrice() + " ");
onFilter(filters);
Log.d("Done Loading Adapt", filters.getSortBy() + " ");
Log.d("ExploreFragObserver", filters.getCategory() + " ");
Log.d("ExploreFragObserver", filters.getCity() + "");
Log.d("ExploreFragObserver", filters.getSortBy() + " ");
Log.d("ExploreFragObserver", filters.getPrice() + " ");
// onFilter(Filters.getDefault());
}
}
});
对话框片段为视图模型中的过滤器对象设置数据,该片段和调用片段都共享。
【问题讨论】:
-
对于未来的访问者,您可以查看 here,其中我已经逐步解释了如何使用 Android 将 Firestore 中的数据显示到
RecyclerView。
标签: android android-fragments android-recyclerview android-livedata