Android 正在RecyclerView中获取当前可见项
我有一个带有全屏RecyclerView的活动来加载图像。用户可以左右滑动以查看图像上的下一项(通过Android 正在RecyclerView中获取当前可见项,android,android-recyclerview,Android,Android Recyclerview,我有一个带有全屏RecyclerView的活动来加载图像。用户可以左右滑动以查看图像上的下一项(通过LinearSnapHelper实现),它具有浮动操作栏,其操作是下载当前可见的图像 问题是当我点击晶圆厂,而不是下载当前的图像下载下一个项目。因为onBindViewHolder会提前为下一个和上一个项目执行。当FAB是项目布局的一部分时,问题不会发生,但在这种情况下,FAB是活动布局的一部分 适配器- public class FullWallAdapter extends RecyclerV
LinearSnapHelper
实现),它具有浮动操作栏,其操作是下载当前可见的图像
问题是当我点击晶圆厂,而不是下载当前的图像下载下一个项目。因为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);
}
}
我只能想到如下的解决办法。 每次用户滚动时触发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) {
...
}
}
}
非常感谢!
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) {
...
}
}
}