2016-08-01 2 views
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"); 
} 
} 
+1

이상하지만 샘플 데이터베이스 응용 프로그램을 실행하고 있다면 이상하지 않습니다. 한 번 더 관찰하면 응용 프로그램을 디버깅하고 2-3 초 동안 Query의 디버그 지점에서 기다립니다 populateViewHolder가 호출되고 뷰가 표시됩니다 ..이 문제가 발생하는 이유는 알 수 없습니다. – MRX

+0

솔직히 왜 이것이 발생하는지 알 수 없습니다. 그것은 단편을 사용하지 않음으로써 내 문제 (FRAGMETS에서 작동하지 않는 문제)를 해결하지 못했던 것으로 드러났습니다. 나는 해결책을 너무 찾아 내고 싶다 –

+0

이것을위한 제일 사람은 Frank van Puffelen이다 –

답변

1

문제는 RecyclerView입니다 WrapConte의 높이가 있었다. 따라서, 리사이클러 높이가 Match_Parent로 설정되어 있는지 확인하십시오. 이렇게하면이 문제가 해결됩니다.

<android.support.v7.widget.RecyclerView 
      android:id="@+id/recycler_view" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scrollbars="vertical" 
      /> 
관련 문제