android - 在 Recycler View 中显示来自 firebase 的特定数据

标签 android firebase android-recyclerview android-cardview

我的一个 Activity 中有一个选项卡布局。不同的选项卡扩展不同的 fragment 。我必须在 cardView inside fragment 中显示数据。 CardView 将包含 Bills 中单个 child 的所有数据。

这是我的 Activity

enter image description here

这是我的数据库的样子:
enter image description here

现在的问题不是显示Bills 节点内所有子节点的数据,而是我需要用两件事1 来过滤它们。 userId2.账单类型。现在,如果 userId 与当前用户的唯一键 mUser.getUid() 匹配,那么它应该检查 billType 假设,如果 billType 是Electronics 然后它应该在 electronics 选项卡内可见。

这是我的 viewElectronics.java fragment View 的代码

public class viewElectronics extends Fragment {

private RecyclerView mReceipt;
private FirebaseAuth mAuth;
private FirebaseUser mUser;
private DatabaseReference mRef;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.electronics_layout, container, false);
    mAuth = FirebaseAuth.getInstance();
    mUser = mAuth.getCurrentUser();
    mRef = FirebaseDatabase.getInstance().getReference().child("Bills");
    mReceipt = (RecyclerView) rootView.findViewById(R.id.electronicsRecycler);
    mReceipt.setLayoutManager(new LinearLayoutManager(getContext()));

    FirebaseRecyclerAdapter<DataModel, ReceiptViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<DataModel, ReceiptViewHolder>
            (DataModel.class, R.layout.reciept_row, ReceiptViewHolder.class, mRef){
        @Override
        protected void populateViewHolder(ReceiptViewHolder viewHolder, DataModel model, int position) {
            viewHolder.setBillNo("Bill No : " + model.getBillNo());
            viewHolder.setStoreName("Store Name : " + model.getCompany());
            viewHolder.setDate("Date : " + model.getDate());
            viewHolder.setTime("Time : " + model.getTime());
            viewHolder.setBillTotal("Total : " + model.getTotal());
        }
    };

    mReceipt.setAdapter(firebaseRecyclerAdapter);
    return rootView;

}

}

假设只有最后一个节点有 billType: Electronics,那么 Electronics 选项卡应该包含最后一张卡片。我需要在此代码中进行哪些更改。 提前致谢。感谢您的帮助。

最佳答案

您需要过滤可以使用 .equalto 轻松完成的 bills 节点

在数据库引用的 firebase 回收器 View 中:

if( userid.equalto(mUser.getUid())){
mRef.orderbychild("billtype").equalto("Electronics")//whatever Category of fragment
else{(adapter.getposition(position).getKey()).orderbychild("billType")}

而不是使用 mRef 作为您的数据库引用,您可以通过说出您需要显示的类别来进行过滤(注意:这仅适用于您在每个 fragment 中复制代码的情况)

 mRef.orderbychild("billtype").equalto("Electronics")

现在,另一方面,当userid不匹配时,则根据账单类型显示。

关于android - 在 Recycler View 中显示来自 firebase 的特定数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49393837/

相关文章:

安卓布局问题。缺少三点菜单按钮

java.lang.ClassCastException 仅适用于 Android 2.3?

ios - 如何根据节点中的特定值从 firebase 获取数据

Android:RecyclerView、拖放(外部 View )和自动滚动?

android - RecyclerView 在刷新之前不显示数据

android - 如何使 RecyclerView 上方的 Layout 滚动

android - 为什么发明了新的 apply() 而不是修改 commit() 行为?

android - 语法错误,插入 "}"完成ClassBody

javascript - 对 documentId 的 Firestore 集合组查询

ios - 使用 populateCellWithBlock FirebaseUI 时出错