0
我有一個使用全屏RecyclerView加載圖像的活動。用戶可以左右滑動來查看下一個項目(通過LinearSnapHelper
實現此目的)在圖像上,它具有浮動操作欄,其動作是下載當前可見的圖像。在RecyclerView中獲取當前可見項目
問題是當我單擊FAB時,而不是下載下一個項目下載當前圖像。因爲onBindViewHolder
預先爲下一個和上一個項目執行。當FAB是項目佈局的一部分時,不會發生問題,但在這種情況下,Fab是「活動」佈局的一部分。
適配器 -
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);
}
}
在活動 -
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);
}
});
}
});