RecyclerView во фрагменте не работает (невозможно добавить к нему данные) - PullRequest
0 голосов
/ 29 ноября 2018

Вот мой фрагмент

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


}

Я могу получить данные из базы данных, но когда я пытаюсь добавить их в представление переработчика, они не показывают никаких данных.Recycler вид показывает пустой.Я проверял свой код много раз, но не нашел решения.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Попробуйте позвонить ..

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

после того, как эта строка позвонит ..

trvAdapter.notifyDataSetChanged();
0 голосов
/ 29 ноября 2018

Вы должны вызвать:

trvAdapter.notifyDataSetChanged();

После цикла for внутри прослушивателя событий (onDataChange).

...