2

Firebase를 백엔드로 사용하고 있습니다. 나는 recyclerview를 사용하여 사용자 목록을 표시합니다. 지금은 달성했지만 지금은 JSON의 "카테고리"를 기반으로 일부 사용자 만 표시하려고합니다. Gridview없이 목록을 표시하면 Gridview에 목록을 표시하려고 할 때 제대로 작동합니다. 제거한 사용자 대신 빈 칸이 보입니다.데이터 바인딩을 사용하여 Recyclerview의 일부 항목을 제거하면 빈 공간이 표시됩니다.

아래 코드는 다음과 같습니다. 내 GridRecylerview

mFragmentChatsBinding.rvChats.setHasFixedSize(true); 
    RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getActivity(), 2); 

    mFragmentChatsBinding.rvChats.setLayoutManager(mLayoutManager); 

내 JSON 응답

{"[email protected],com":{ 
    "category":"admin", 
    "email":"[email protected],com", 
    "hasLoggedInWithPassword":false, 
    "name":"xxxx"}, 
    "[email protected],com":{ 
    "category":"user", 
    "email":"[email protected],com", 
    "hasLoggedInWithPassword":false, 
    "name":"yyy",}} 

내 Recyclerview 코드

private void initializeFirebase() { 
    final Query refUsers = FirebaseDatabase.getInstance() 
      .getReference(ConstantsFirebase.FIREBASE_LOCATION_USERS); 
    refUsers.keepSynced(true); 
     mAdapter = new FirebaseRecyclerAdapter<User, ChatsItemHolder>(User.class, R.layout.adapter_item_chats, 
       ChatsItemHolder.class, refUsers) { 
      @Override 
      public ChatsItemHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
       adapterItemChatsBinding = DataBindingUtil.inflate(LayoutInflater 
         .from(parent.getContext()), viewType, parent, false); 
       //adapterItemChatsBinding.tvUserName.setTypeface(Typefaces.get(getActivity(), Constants.FONT_ROBOT_REGULAR)); 

       return new ChatsItemHolder(adapterItemChatsBinding); 
      }  
      @Override 
      protected void populateViewHolder(ChatsItemHolder viewHolder, User user, int position) { 

         if (user.getCategory().equals("admin")) {        
          viewHolder.setIsRecyclable(false);        viewHolder.mAdapterItemChatsBinding.lnItemRow.removeAllViews();        viewHolder.mAdapterItemChatsBinding.lnItemRow.setPadding(0, 0, 0, 0);  
         } else { 
          viewHolder.bindUser(user, ChatsFragment.this);  
         }  
      mAdapter.notifyDataSetChanged();    
} 

내가

if (user.getCategory().equals("admin")) {  
          viewHolder.setIsRecyclable(false); 
          viewHolder.mAdapterItemChatsBinding.lnItemRow.removeAllViews();        viewHolder.mAdapterItemChatsBinding.lnItemRow.setPadding(0, 0, 0, 0);  
         } else { 
          viewHolder.bindUser(user, ChatsFragment.this);  
         } 

인가 내가 원하는 사용자를 표시하지하려면 다음 코드를 사용하고 거기에 어떤 내기 그 방법으로는 recyclerview에서 일부 항목을 제거 할 수 있습니다. 그렇다면 무엇입니까? 아니요, gridrecyclerview를 사용할 때 빈 공간이 생기고 정상적인 recyclerview를 표시 할 때 잘 작동하는 이유는 무엇입니까?

+0

필터는 어댑터에 설정하면됩니다. –

+0

나는 FirebaseRecyclerAdapter를 사용하고 있습니다. – Stackover67

+0

그러면 여러분의 요구 사항에 따라 쿼리를 만들 수 있다고 생각합니다. –

답변

0

여러분은 gridView 또는 어댑터를 새로 고침 할 수 있다고 생각합니다. 예를 들어

adapter.notifyDataChanged(); 
grid.invalidateViews(); 
grid.setAdapter(adapter); 
+0

recyclerview에서 invalidateViews 메서드를 찾을 수 없습니다 – Stackover67

+0

gridView를 무효화해야합니다 – UmAnusorn

+0

질문에 gridrecyclerview 코드를 추가했습니다. 수표를 가지고 무효화하는 방법을 말해 줄 수 있습니까? – Stackover67

0

대신보기) (리스트로부터 아이템을 제거하고

adapter.notifyDataSetChanged 설정 제거;

+0

목록에서 항목을 제거하는 방법을 알려주시겠습니까? – Stackover67

관련 문제