android - fragment 中的 RecyclerView 不工作(无法向其添加数据)

标签 android firebase android-recyclerview recyclerview-layout

这是我的 fragment

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;
    }

}

如果我 toast “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 获取数据,但是当我尝试将其添加到回收站 View 时,它没有显示任何数据。回收站 View 显示为空。我多次检查我的代码,但没有找到解决方案。

最佳答案

你应该调用:

trvAdapter.notifyDataSetChanged();

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

关于android - fragment 中的 RecyclerView 不工作(无法向其添加数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53539854/

相关文章:

android - 警告 : API 'variant.getJavaCompile()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'

android - 在android中放大和缩小图像

java - Firebase 查询 Or'ing whereEqualTo 以获得可能值的列表

java - 当应用程序关闭时,我可以不断地从服务类中收听数据变化吗?

android - RecyclerView 项目动画,onAnimationFinished 被调用,但没有 onAnimationStarted。为什么?

RecyclerView 中的 Android TalkBack

android - Activity 没有选项菜单

android - 第二次单击时,TabActivity 中的 Activity 不运行 onCreate 方法

ios - 登录功能不工作..抛出错误...Firebase 和 Xcode 9

java - RecyclerView.onMeasure(...) 的空指针异常