1

Я пытаюсь удалить элемент в Firebase Recycler адаптер с этим кодом:Firebase Ресайклер адаптер не показывают вид собственности, когда removeValue

messageAdapter.getRef(position).removeValue(); 

но ввиду корзины, вид этого элемента перепутались: enter image description here

Вот мой код о адаптере для переработчиков Firebase. Он отлично работает, когда я удаляю элемент. MessageViewHolder Класс:

public static class MessageViewHolder extends RecyclerView.ViewHolder implements View.OnCreateContextMenuListener { 
     public TextView tvMessage; 
     public TextView tvDateSending; 
     public CircleImageView ivMessenger; 
     public LinearLayout linearLayout; 


     public MessageViewHolder(View v) { 
      super(v); 
      tvMessage = (TextView) itemView.findViewById(R.id.tvMessage); 
      tvDateSending = (TextView) itemView.findViewById(R.id.tvDateSending); 
      ivMessenger = (CircleImageView) itemView.findViewById(R.id.ivMessenger); 
      linearLayout= (LinearLayout) itemView.findViewById(R.id.llOneToOneChat); 
      v.setOnCreateContextMenuListener(this); 

     } 
     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 
      menu.add(0,1 , 0, "Edit"); 
      menu.add(0, COPY, 0, "Copy"); 
      menu.add(0, DELETE, 0, "Delete"); 
     } 

    } 

MessageAdapter класс:

public class MessageAdapter extends FirebaseRecyclerAdapter<Message, MessageViewHolder>{ 

     private Context context; 
     private long prevMessageTime=0; 
     public int position; 

     public int getPosition() { 
      return position; 
     } 

     public void setPosition(int position) { 
      this.position = position; 
     } 

     public MessageAdapter(Class<Message> modelClass, int modelLayout, Class<MessageViewHolder> viewHolderClass, DatabaseReference ref, Context context) { 
      super(modelClass, modelLayout, viewHolderClass, ref); 
      this.context = context; 
     } 

     @Override 
     protected void populateViewHolder(MessageViewHolder viewHolder, Message message, final int position) { 
      //do something 
      viewHolder.tvMessage.setOnLongClickListener(new View.OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View v) { 
        setPosition(position); 
        return false; 
       } 

      }); 
     } 
    } 

В деятельности я переопределение onContextItemSelected

@Override 
    public boolean onContextItemSelected(MenuItem item) { 
     int position = -1; 
     try { 
      position = messageAdapter.getPosition(); 
     } catch (Exception e) { 
//   Log.d(TAG, e.getLocalizedMessage(), e); 
      return super.onContextItemSelected(item); 
     } 
     switch (item.getItemId()) { 
      case 1: 
       // do your stuff 

       break; 
      case 2: 
       // copy message 
       if (position!= -1){ 
        ClipboardManager clipboard = (ClipboardManager) OneToOneConversationActivity.this.getSystemService(Context.CLIPBOARD_SERVICE); 
        String text = messageAdapter.getItem(position).getMessage(); 
        ClipData clip = android.content.ClipData.newPlainText("Copied Text", text); 
        clipboard.setPrimaryClip(clip); 

       } 

       break; 
      case 3: 
       //delete message 
       if (position!= -1) 
        messageAdapter.getRef(position).removeValue(); 
       break; 
     } 
     return super.onContextItemSelected(item); 
    } 

как сделать что вид исчезает из Scre ан?

+0

, пожалуйста, разместите свой полный код .. Что вы сделали при удалении. –

+0

@ArpitPatel Я обновил свой вопрос. PLS помочь мне! –

ответ

0

Я нашел трюк, который может принимать удаленный вид от RecyclerView: вот мой метод:

public void deleteMessage(int position){ 
    MessageViewHolder messageViewHolder= (MessageViewHolder) recyclerView.findViewHolderForAdapterPosition(position); 
    messageViewHolder.linearLayout.setVisibility(View.GONE); 
    messageViewHolder.tvDateSending.setVisibility(View.GONE); 

} 

с LinearLayout является представление содержит все компоненты в этом viewHolder!