2017-10-06 14 views
0

私は画像を読み込むためにフルスクリーンRecyclerViewを使用しています。ユーザーは左右にスワイプして次のアイテムを見ることができます(これはLinearSnapHelperによって実現されます)。イメージの上には、現在表示されているイメージをダウンロードするフローティングアクションバーがあります。RecyclerViewで現在表示されている項目を取得する

問題は、現在のイメージをダウンロードする代わりにFABをクリックすると、次のアイテムをダウンロードすることです。 onBindViewHolderは、次の項目と前の項目に対して事前に実行されるためです。 FABがアイテムレイアウトの一部である場合には問題は発生しませんが、この場合Fabはアクティビティレイアウトの一部です。次のように私が唯一の解決策を考えることができるアクティビティ -

FullWallAdapter adapter = new FullWallAdapter(wallKeys, new FullWallAdapter.OnFullSetupViewListener() { 
     @Override 
     public void onSetupView(final FullscreenViewHolder holder, final ImageModel image, 
           int position, final String wallKey) { 
      holder.setImageView(image); 

      downloadFab.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        incrementDownload(wallKey, image); 
        String params; 
        params = wallpaper.getPhotoJson(); 
        fetchSave(params); 

       } 
      }); 
     } 
    }); 

答えて

0

アダプタ -

public class FullWallAdapter extends RecyclerView.Adapter<FullscreenViewHolder> { 

private ArrayList<String> mWallKeys; 
private OnFullSetupViewListener mOnFullSetupViewListener; 

public FullWallAdapter(ArrayList<String> wallKeys, OnFullSetupViewListener listener) { 
    this.mWallKeys = wallKeys; 
    this.mOnFullSetupViewListener = listener; 
} 

@Override 
public FullscreenViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.fullscreen_wallpaper_preview, parent, false); 
    return new FullscreenViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(final FullscreenViewHolder holder, int position) { 
    ValueEventListener wallListener = new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      ImageModel image = dataSnapshot.getValue(ImageModel.class); 
      mOnFullSetupViewListener.onSetupView(holder, image, holder.getAdapterPosition(), dataSnapshot.getKey()); 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.e("WallAdapter", "Error occurred: " + databaseError.getMessage()); 
     } 
    }; 
    DatabaseReference ref = FireUtils.getWallpapersRef().child(mWallKeys.get(position)); 
    ref.addValueEventListener(wallListener); 
    holder.mWallRef = ref; 
    holder.mWallListener = wallListener; 
} 

@Override 
public int getItemCount() { 
    return mWallKeys.size(); 
} 

@Override 
public void onViewRecycled(FullscreenViewHolder holder) { 
    super.onViewRecycled(holder); 
    if (holder.mWallListener != null) 
     holder.mWallRef.removeEventListener(holder.mWallListener); 
} 

public interface OnFullSetupViewListener { 
    void onSetupView(FullscreenViewHolder holder, ImageModel image, int position, String wallKey); 
} 
} 

。 ユーザーがスクロールするたびに、onClickListenerをトリガーします。

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      super.onScrolled(recyclerView, dx, dy); 
      currentPosition = llm.findFirstVisibleItemPosition(); 
      downloadFab.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
       ... 
       } 
     } 
} 
関連する問題