title: RecyclerView notifyItemChanged call onBindViewHolder also on not visible cells
body: <p>I have a vertical <code>RecyclerView</code> with <code>LinearLayoutManager</code> with different item types and one <code>ViewHolder</code>. It is a messaging screen.</p>
  
  <p>I want show/hide message date on click on the cell.</p>
  
  <pre><code>override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
          val layout = R.layout.xxx
          val viewHolder = ViewHolder(LayoutInflater.from(parent.context).inflate(layout, parent, false))
  
  
          viewHolder.itemView.layout?.setOnClickListener {
              setMessageDateVisibility(viewHolder)
          }
  
          return viewHolder
      }
  </code></pre>
  
  <p>So i added the method to reload view with <code>notifyItemChanged(pos)</code></p>
  
  <pre><code>private fun setMessageDateVisibility(holder: ViewHolder) {
          val pos = holder.adapterPosition
          if (pos.toLong() == THREAD_DEFAULT_POSITION)
              return
  
          val message = mDataset[pos]
  
          message.isDateVisible = !message.isDateVisible
          notifyItemChanged(pos)
  }
  
  override fun onBindViewHolder(holder: ViewHolder, position: Int) {
          val message = mDataset[position]
  
          itemView.message_date.text = message.date
          itemView.message_date.visibility = if (message.isDateVisible)
              View.VISIBLE
          else
              View.GONE
      }
  </code></pre>
  
  <p>But the problem a the end, is that because of this line <code>notifyItemChanged(pos)</code>, the override <code>onBindViewHolder</code> method called for all not visible cells and so my screen is lagging with 150/200 cells</p>
  
  <p>Can you help me to find a solution ?</p>