title: add scroll listener to RecyclerView adapter
body: <p>how to implement scroll listener to RecyclerView adapter so i can use on my activity class. You will find below my recycler view adapter. The reason i want scroll listener because i want the position to be changed when i scroll. right now it can only be changed if i click on the item inside the recycle view. </p>
  
  <p>basically what i wanna do is i will have a text view in the activity class and when i scroll through the recyclerView i should get the name of item      </p>
  
  <pre><code> Activity activity;
      ArrayList&lt;BookData&gt; images = new ArrayList&lt;&gt;();
      AlbumDBHandler db;
      private Context mContext;
  
      public class MyViewHolder extends RecyclerView.ViewHolder {
          public ImageView thumbnail;
          public TextView name;
          public Button button;
  
          public MyViewHolder(View view) {
              super(view);
  
              thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
              name = (TextView) view.findViewById(R.id.textViewGallery);
              button = (Button) view.findViewById(R.id.main_activity_button_carasoul);
          }
      }
      public GalleryAdapter(Context context, ArrayList&lt;BookData&gt; images) {
          mContext = context;
          this.images = images;
          this.db = new AlbumDBHandler(context);
      }
      @Override
      public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
          View itemView = LayoutInflater.from(parent.getContext())
                  .inflate(R.layout.gallery_thumbnail, parent, false);
  
          return new MyViewHolder(itemView);
      }
      @Override
      public void onBindViewHolder(final MyViewHolder holder, int position) {
  
          BookData image = images.get(position);
  
          if("".equals(images.get(position).getImageLocalPath())){
  
              Glide.with(mContext)
                      .load(images.get(position).getImagePath_2())
                      .thumbnail(0.5f)
                      .crossFade()
                      .diskCacheStrategy(DiskCacheStrategy.ALL)
                      .into(holder.thumbnail);
  
              new ImageDownloaderTask(images.get(position)).execute(images.get(position).getImagePath_2());
  
          }else{
              Glide.with(mContext).load(new File(images.get(position).getImageLocalPath())).into(holder.thumbnail);
          }
  
          holder.name.setText(images.get(position).getName());
          }
  
      class ImageDownloaderTask extends AsyncTask&lt;String, Void, Bitmap&gt; {
          private final WeakReference&lt;BookData&gt; bookDataWeakReference;
  
          public ImageDownloaderTask(BookData bookData) {
              bookDataWeakReference = new WeakReference&lt;BookData&gt;(bookData);
          }
  
          @Override
          protected Bitmap doInBackground(String... params) {
              return downloadBitmap(params[0]);
          }
  
          @Override
          protected void onPostExecute(Bitmap bitmap) {
              if (isCancelled()) {
                  bitmap = null;
              }
  
              if (bookDataWeakReference != null &amp;&amp; bitmap != null) {
                  BookData bookData = bookDataWeakReference.get();
                  if (bookData != null){
  
                      if (activity instanceof mainActivityCarasoul){
                          String path = FileUtils.saveBitmapToCamera(activity,bitmap,bookData.getName()+".jpg", BookData.Book).getPath();
                          bookData.setImageLocalPath(path);
                          db.updateABook(bookData);
                      }
                  }
              }
          }
          private Bitmap downloadBitmap(String url) {
              HttpURLConnection urlConnection = null;
              try {
                  URL uri = new URL(url);
                  urlConnection = (HttpURLConnection) uri.openConnection();
                  int statusCode = urlConnection.getResponseCode();
                  if (statusCode != HttpURLConnection.HTTP_OK) {
                      return null;
                  }
  
                  InputStream inputStream = urlConnection.getInputStream();
                  if (inputStream != null) {
                      Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                      return bitmap;
                  }
              } catch (Exception e) {
                  urlConnection.disconnect();
                  Log.w("ImageDownloader", "Error downloading image from " + url);
              } finally {
                  if (urlConnection != null) {
                      urlConnection.disconnect();
                  }
              }
              return null;
          }
      }
  
      @Override
      public int getItemCount() {
          return images.size();
      }
  
      public interface ClickListener {
          void onClick(View view, int position);
  
          void onLongClick(View view, int position);
      }
  
      public static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {
  
          private GestureDetector gestureDetector;
          private GalleryAdapter.ClickListener clickListener;
  
          public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final GalleryAdapter.ClickListener clickListener) {
              this.clickListener = clickListener;
  
              gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
                  @Override
                  public boolean onSingleTapUp(MotionEvent e) {
                      return true;
                  }
  
                  @Override
                  public void onLongPress(MotionEvent e) {
                      View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
                      if (child != null &amp;&amp; clickListener != null) {
                          clickListener.onLongClick(child, recyclerView.getChildPosition(child));
                      }
                  }
              });
          }
          @Override
          public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
  
              View child = rv.findChildViewUnder(e.getX(), e.getY());
              if (child != null &amp;&amp; clickListener != null &amp;&amp; gestureDetector.onTouchEvent(e)) {
                  clickListener.onClick(child, rv.getChildPosition(child));
              }
              return false;
          }
          @Override
          public void onTouchEvent(RecyclerView rv, MotionEvent e) {
          }
  
          @Override
          public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
  
          }
      }
  </code></pre>