1

我試圖刪除火力地堡回收站適配器的項目,此代碼:火力地堡回收站適配器不顯示視圖屬性時removeValue

messageAdapter.getRef(position).removeValue(); 

但在回收看來,這個項目的看法搞砸: enter image description here

這是我關於Firebase Recycler Adapter的代碼。它可以正常工作,當我刪除項目。 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我已更新我的問題。請幫助我! –

回答

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所有組件!