조각을 사용하는 NavigationDrawer 활동이 있습니다. 내 조각 중 하나에서 Firebase 데이터베이스의 데이터를 RecyclerView로로드하려고합니다.Android - Firebase 데이터베이스의 데이터를 조각으로로드하십시오.
그래서 데이터베이스에 저장 한 객체에 대한 ArrayList가 있습니다. 그런 다음 데이터베이스에서 배열 목록으로 개체를 추가하는 데이터베이스 참조에 ValueEventListener를 추가합니다. 그런 다음 ArrayList를 RecyclerView Adapter에 제공합니다. RecyclerView 어댑터는 내 객체로 목록을 만들어야합니다.
addListenerForSingleValueEvent를 사용할 때 작동하지 않는 경우, 항상 빈 RecyclerView가 표시됩니다. addValueEventListener를 사용할 때 처음부터 작동하지 않지만 가로 방향으로 휴대 전화의 방향을 전환하면 데이터가 갑자기 나타납니다. 그리고 내가 정상적인 방향으로 돌아 가면 여전히 거기에 있습니다. 그러나 처음에는 조각을 열지 않습니다. 여기
이 조각 클래스의 내 코드입니다 : 여기public class RvAdapter extends RecyclerView.Adapter<RvAdapter.MyViewHolder> {
private ArrayList<LogEntry> entries;
public RvAdapter(ArrayList<LogEntry> entries){
this.entries = entries;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.log_entry_item, null);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
holder.tvAction.setText(entries.get(position).action);
holder.tvDate.setText(dateFormat.format(entries.get(position).date)+"\n"+timeFormat.format(entries.get(position).date));
holder.ivIcon.setImageResource(entries.get(position).icon);
holder.itemView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// Do something
}
});
}
@Override
public int getItemCount() {
return entries.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView tvAction, tvDate;
ImageView ivIcon;
public MyViewHolder(View itemView) {
super(itemView);
tvAction = (TextView) itemView.findViewById(R.id.tvAction);
tvDate = (TextView) itemView.findViewById(R.id.tvDate);
ivIcon = (ImageView) itemView.findViewById(R.id.ivIcon);
}
}
}
그리고 내 LogEntry.java :
public class LogEntry {
public String action;
public Date date;
public int icon;
public String message;
public LogEntry() {}
public LogEntry(String action, Date date, int icon, String message) {
this.action = action;
this.date = date;
this.icon = icon;
this.message = message;
}
}
누군가 여기
public class LogFragment extends Fragment {
private RecyclerView recyclerView;
private RecyclerView.Adapter rvAdapter;
private RecyclerView.LayoutManager rvLayoutManager;
private ArrayList<LogEntry> entries;
private DatabaseReference databaseReference;
private DatabaseReference logReference;
private FirebaseAuth firebaseAuth;
private FirebaseUser firebaseUser;
public LogFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_log, container, false);
databaseReference = FirebaseDatabase.getInstance().getReference();
firebaseAuth = FirebaseAuth.getInstance();
firebaseUser = firebaseAuth.getCurrentUser();
loadEntries();
recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerView);
rvLayoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(rvLayoutManager);
rvAdapter = new RvAdapter(entries);
recyclerView.setAdapter(rvAdapter);
// Inflate the layout for this fragment
return rootView;
}
private void loadEntries(){
entries = new ArrayList<>();
logReference = databaseReference.child("log").child(firebaseUser.getUid());
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()){
entries.add(ds.getValue(LogEntry.class));
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w("LogFragment", "loadLog:onCancelled", databaseError.toException());
}
};
logbuchReference.addValueEventListener(valueEventListener);
}
}
그리고 나의 RvAdapter.java입니다 무슨 문제인지 알아?
편집 :
난 직후의 ArrayList를 System.out.prinln 내가 데이터를 얻을 수()에 대한. 따라서 데이터베이스에서 데이터를로드하는 중입니다. 그러나 데이터를 제시하는 것은 효과가 없습니다.