在Recycler视图中显示firebase中的特定数据

时间:2018-03-20 20:48:32

标签: android firebase android-recyclerview android-cardview

我的一个活动中有一个标签布局。不同的标签扩展不同的片段我必须在 cardView内部片段中显示数据。 CardView将包含 Bills 内单个孩子的所有数据。

这是我的活动

enter image description here

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

现在的问题不是显示 Bills 节点内所有孩子的数据,而是需要用两个 1来过滤它们。 userId 2。 billType 即可。现在,如果 userId 与当前用户的唯一键 mUser.getUid()匹配,则应检查 billType ,如果billType为那么电子产品应该在电子产品标签中可见。

这是viewElectronics.java

的片段视图的代码
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标签应包含最后一张卡。我在此代码中需要进行哪些更改。 提前致谢。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您需要过滤您的bills节点,这可以轻松地通过.equalto

完成

在您的Firebase回收器视图中的数据库参考中:

require("vendor/autoload.php");
use PHPHtmlParser\Dom;
$html = new Dom;

$url = https://www.example.com;
$html->loadFromFile($url);

// I need to do this:
$css = "<style>#custom{css:code;}.goes{over:here;}</style>"
$html->find("head")->append($css);

您可以通过说出您需要显示的类别来过滤(而不是使用mRef作为数据库引用)(注意:仅当您在每个片段中复制代码时才适用)

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

现在,另一方面,如果用户名不匹配,则根据帐单类型显示。