2017-10-06 53 views
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); 

       } 
      }); 
     } 
    }); 

回答

0

我只能想辦法解決如下。 每次用戶滾動時觸發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) { 
       ... 
       } 
     } 
} 
相關問題