2
아래의 구조가 내 firebase 콘솔에 있습니다. 값을 읽고 모든 사용자를 표시하려고하지만 populateViewHolder가 호출되지 않습니다. 아래 코드에서 내가 여기Firebase populateViewHolder가 호출되지 않습니다
mAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
super.onItemRangeInserted(positionStart, itemCount);
int friendlyMessageCount = mAdapter.getItemCount();
int lastVisiblePosition =
mManager.findLastCompletelyVisibleItemPosition();
// If the recycler view is initially being loaded or the
// user is at the bottom of the list, scroll to the bottom
// of the list to show the newly added message.
if (lastVisiblePosition == -1 ||
(positionStart >= (friendlyMessageCount - 1) &&
lastVisiblePosition == (positionStart - 1))) {
recyclerView.scrollToPosition(positionStart);
}
}
});
1 내 코드와 같이 항목이 계산받을 수 있지만
users
+OW5BYennVRXvfzOjfKpup9rZEYv2
-email: "[email protected]"
-username: "abc"
는
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View rootView = inflater.inflate(R.layout.fragment_home_page, container, false);
mDatabase = FirebaseDatabase.getInstance().getReference();
recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mManager = new LinearLayoutManager(getActivity());
mManager.setReverseLayout(true);
mManager.setStackFromEnd(true);
Query postsQuery = mDatabase.child("users");
mAdapter = new FirebaseRecyclerAdapter<User, PostViewHolder>(User.class, R.layout.post,
PostViewHolder.class, postsQuery) {
@Override
protected void populateViewHolder(PostViewHolder viewHolder, User model, int position) {
final DatabaseReference postRef = getRef(position);
final String postKey = postRef.getKey();
viewHolder.bindToPost(model);
}
};
mAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
super.onItemRangeInserted(positionStart, itemCount);
int friendlyMessageCount = mAdapter.getItemCount();
int lastVisiblePosition =
mManager.findLastCompletelyVisibleItemPosition();
// If the recycler view is initially being loaded or the
// user is at the bottom of the list, scroll to the bottom
// of the list to show the newly added message.
if (lastVisiblePosition == -1 ||
(positionStart >= (friendlyMessageCount - 1) &&
lastVisiblePosition == (positionStart - 1))) {
recyclerView.scrollToPosition(positionStart);
}
}
});
recyclerView.setAdapter(mAdapter);
}
표시 :
는public class PostViewHolder extends RecyclerView.ViewHolder {
public TextView title, emailt;
public PostViewHolder(View view) {
super(view);
title = (TextView) view.findViewById(R.id.title);
emailt = (TextView) view.findViewById(R.id.count);
}
public void bindToPost(User post, View.OnClickListener starClickListener) {
title.setText(post.username);
emailt.setText(post.email + "Likes");
}
public void bindToPost(User post) {
title.setText(post.username);
emailt.setText(post.email + "Likes");
}
}
이상하지만 샘플 데이터베이스 응용 프로그램을 실행하고 있다면 이상하지 않습니다. 한 번 더 관찰하면 응용 프로그램을 디버깅하고 2-3 초 동안 Query의 디버그 지점에서 기다립니다 populateViewHolder가 호출되고 뷰가 표시됩니다 ..이 문제가 발생하는 이유는 알 수 없습니다. – MRX
솔직히 왜 이것이 발생하는지 알 수 없습니다. 그것은 단편을 사용하지 않음으로써 내 문제 (FRAGMETS에서 작동하지 않는 문제)를 해결하지 못했던 것으로 드러났습니다. 나는 해결책을 너무 찾아 내고 싶다 –
이것을위한 제일 사람은 Frank van Puffelen이다 –