片段中的RecyclerView不起作用(无法向其中添加数据)

时间:2018-11-29 13:12:40

标签: android firebase android-recyclerview recycler-adapter recyclerview-layout

这是我的片段

public class TransactionsFragment extends Fragment {
 private FirebaseAuth mAuth;
    private DatabaseReference mDBref;
    FirebaseUser Fuser;
    private String UID;
    private RecyclerView recyclerView;
    private RecyclerView.Adapter trpAdapter;
    private List<TransGetterSetter> DataList;
    String trans_id;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.fragment_transactions, container, false);

    DataList = new ArrayList<>();

    recyclerView = (RecyclerView) v.findViewById(R.id.RVList);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    TransactionRVAdapter trvAdapter = new TransactionRVAdapter(DataList, getContext());
    recyclerView.setAdapter(trvAdapter);

    mAuth = FirebaseAuth.getInstance();
    mDBref = FirebaseDatabase.getInstance().getReference();
    Fuser = mAuth.getInstance().getCurrentUser();
    UID = Fuser.getUid();



    mDBref.child("transactions").child(UID).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot chidSnap : dataSnapshot.getChildren()) {
                trans_id = chidSnap.getKey();
                DataList.add(new TransGetterSetter("" + trans_id));

            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
   trvAdapter.notifyDataSetChanged();

    return v;
    }

}

如果我敬酒“ trans_id”字符串即时获得预期结果。

这是我的适配器类

    public class TransactionRVAdapter extends RecyclerView.Adapter<TransactionRVAdapter.rvViewHolder> {
Context mContext;
List<TransGetterSetter> DataList = new ArrayList<>();

public class rvViewHolder extends RecyclerView.ViewHolder{
    private TextView TransId;

    public rvViewHolder(@NonNull View itemView) {
        super(itemView);
        TransId = (TextView) itemView.findViewById(R.id.TransIdTxt);
    }
}

public TransactionRVAdapter( List<TransGetterSetter> DataList,Context mContext){
    this.DataList = DataList;
    this.mContext = mContext;
}

@NonNull
@Override
public rvViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    LayoutInflater inflater = LayoutInflater.from(mContext);
    View view = inflater.inflate(R.layout.fragment_transactions_item, viewGroup, false);
    return new rvViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull rvViewHolder rvViewHolder, int i) {
    rvViewHolder.TransId.setText(DataList.get(i).getTrans_id());
}

@Override
public int getItemCount() {
    return DataList.size();
}

}

这是我的GetterSetter课

public class TransGetterSetter {

private String trans_id;

public TransGetterSetter() {

}

public TransGetterSetter(String trans_id) {
    this.trans_id = trans_id;
}

public String getTrans_id() {
    return trans_id;
}

public void setTrans_id(String trans_id) {
    this.trans_id = trans_id;
}


}

我能够从Firebase获取数据,但是当我尝试将其添加到回收站视图中时,它没有显示任何数据。回收商视图显示为空。我检查了很多次代码,但没有找到解决方案。

2 个答案:

答案 0 :(得分:0)

您应该致电:

trvAdapter.notifyDataSetChanged();

(onDataChange)事件侦听器中的for循环之后。

答案 1 :(得分:0)

尝试致电..

            DataList.add(new TransGetterSetter("" + trans_id));

在这行称为..

之后
trvAdapter.notifyDataSetChanged();