2017-10-12 20 views
0

私のJason Responseからいくつかのアイテムを私のrecyclerviewで削除しようとしていますが、削除するアイテムの代わりに空のアイテムスペースが作成されています。これは、私がLinearlayoutマネージャを使用している場合に、gridlayoutマネージャをrecyclerviewで使用している場合にのみ発生しています。以下は私のコードGridlayoutの一部のアイテムを削除するRecyclerviewに空白が残る

activityRecylerviewBinding.recyclerview1.setHasFixedSize(true); 
    //activityRecylerviewBinding.recyclerview1.setLayoutManager(new LinearLayoutManager(getActivity())); 

    RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getActivity(), 2); 
    activityRecylerviewBinding.recyclerview1.setLayoutManager(mLayoutManager); 
    activityRecylerviewBinding.recyclerview1.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(5), true)); 
    activityRecylerviewBinding.recyclerview1.setItemAnimator(new DefaultItemAnimator()); 

そして、私はそれが正常に動作しますブローコードを使用するとアイテム

if (!user.emailId.equals(clickedemail)){ 
       viewHolder.setIsRecyclable(false); 
       viewHolder.mAdapterItemChatsBinding.gooot.removeAllViews(); 
       viewHolder.mAdapterItemChatsBinding.gooot.setPadding(0, 0, 0, 0); 
       //viewHolder.mAdapterItemChatsBinding.gooot.getLayoutParams().height = 0; 
      }else { 
       viewHolder.bindUser(user, RecycFragment.this); 
      } 

を削除するためです。

 activityRecylerviewBinding.recyclerview1.setLayoutManager(new LinearLayoutManager(getActivity())); 

JsonParsingコード

private void initializeFirebase() { 

    final Query refUsers = FirebaseDatabase.getInstance() 
      .getReference(ConstantsFirebase.FIREBASE_LOCATION_GARMENTS); 
    refUsers.keepSynced(true); 

    final List<UploadImage> uploadImageList = new ArrayList<>(); 
    refUsers.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot messageSnapshot : dataSnapshot.getChildren()) { 

       UploadImage uploadImage = messageSnapshot.getValue(UploadImage.class); 

       uploadImageList.add(uploadImage); 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 



    mAdapter = new FirebaseRecyclerAdapter<UploadImage, ChatsItemHolder>(UploadImage.class, R.layout.recycitemfirebase, 
      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, final UploadImage user, int position) { 
      SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
      clickedemail = prefs.getString(Constants.KEY_CLICKED_EMAIL, ""); 


      if (!user.emailId.equals(clickedemail)){ 
       viewHolder.setIsRecyclable(false); 
       viewHolder.mAdapterItemChatsBinding.gooot.removeAllViews(); 
       viewHolder.mAdapterItemChatsBinding.gooot.setPadding(0, 0, 0, 0); 

       //viewHolder.mAdapterItemChatsBinding.gooot.getLayoutParams().height = 0; 
      }else { 
       viewHolder.bindUser(user, RecycFragment.this); 
      } 

      viewHolder.mAdapterItemChatsBinding.title.setText(user.getGarment_name()); 

      viewHolder.mAdapterItemChatsBinding.count.setText(user.getGarment_color()); 
      Glide.with(viewHolder.mAdapterItemChatsBinding.thumbnail.getContext()) 
        .load(user.getImage()) 
        .placeholder(R.drawable.ic_person) 
        .fitCenter() 
        .dontAnimate() 
        .into(viewHolder.mAdapterItemChatsBinding.thumbnail); 
     } 




    }; 

    activityRecylerviewBinding.recyclerview1.setAdapter(mAdapter); 

}

誰かが私が間違って何をやっている私に言うことはできますか?

PS:誰かが私の質問を理解できない場合は、コメントしてください。スクリーンショットを投稿します。

+0

は、アダプタを更新使用して** notifyDataSetChanged()** コードを次のように 'activityRecylerviewBinding.setAdapter(アダプタ)。 adapter.notifyDataSetChanged(); ' – Karthik

+0

回答ありがとうございますが、問題は解決していません。 – Stackover67

+0

あなたの商品をどこから削除しますか? onBindViewHolderで実行されているif(!user.emailId.equals(clickedemail))の条件付きですか? – Daivid

答えて

0

ここで、データセットからアイテムを削除していますか?

アイテムを削除するアクションでは、データセット内のアイテムインデックスは削除しないといけませんか?もしそうであれば、このようなものは動作するはずです:

public void removeItem(final int index) { 
    list.remove(index); 
    adapter.notifyItemRemoved(index); 
} 
+0

私はjsonの応答を解析し、この条件に基づいて "if(!user.emailId.equals(clickedemail))"私はallviewsを削除していますパディングを外して0 – Stackover67

+0

OKですが、JSONレスポンスをJavaオブジェクトのリスト/配列に解析してから、RecyclerViewを設定するとしますか?そうであれば、リスト/配列内の項目を削除してから、RecyclerViewを設定することもできます。 –

+0

私の質問を編集し、私のjsonparsingコードを追加しました。あなたはそれを見てみることができます – Stackover67

関連する問題