gpt4 book ai didi

android - 在 RecyclerView 中获取当前可见项目

转载 作者:搜寻专家 更新时间:2023-11-01 09:31:46 25 4
gpt4 key购买 nike

我有一个全屏 RecyclerView 加载图像的 Activity 。用户可以左右滑动以查看下一个项目(通过 LinearSnapHelper 实现)在图像上方,它有 float 操作栏,其操作是下载当前可见的图像。

问题是当我单击 FAB 时,它没有下载当前图像而是下载下一个项目。因为 onBindViewHolder 会针对下一项和上一项提前执行。当 FAB 是项布局的一部分时不会出现问题,但在这种情况下 Fab 是 Activity 布局的一部分。

适配器-

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);
}
}

Activity 中-

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);

}
});
}
});

最佳答案

我只能想到如下解决方案。每次用户滚动时触发 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) {
...
}
}
}

关于android - 在 RecyclerView 中获取当前可见项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46611689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com