gpt4 book ai didi

java - 在 RecyclerView.Adapter 中单击时传递数据

转载 作者:行者123 更新时间:2023-12-01 18:10:43 25 4
gpt4 key购买 nike

我的 fragment 上有一个 RecyclerView,它显示我从 FTP 服务器加载的某些文件。我试图为每个项目设置一个 onClickListener ,因此当单击它时,将显示一个 DialogFragment ,用户可以在其中选择是否下载或打开文件。
我的问题是:
我需要向我的对话框发送两件事:

  1. 目标 fragment ,将在用户选择要执行的操作后下载/打开文件。使用 setTargetFragment() 可以轻松实现这一点,唯一的问题是我无权访问 RecyclerView.ViewHolder 中的 fragment 。
  2. 要下载/打开的文件的名称。这样对话框就会将其发送到目标 fragment 。这里的问题是我无权访问 RecyclerView.ViewHolder 中的数据集,因为它是静态的,而我的数据集不是。

为什么选择 ViewHolder
如果有更好的地方可以做到这一点,我会很高兴听到。我在 RecyclerView.ViewHolder 中尝试这样做的原因是它可以访问该位置(被单击的项目)。我曾考虑过在 onBindViewHolder() 上执行此操作,但在那里我可以访问数据集,但不能访问该位置。

我的适配器代码:

public class FilesAdapter extends RecyclerView.Adapter<FilesAdapter.ViewHolder> {
public final String TAG = "FILES_ADAPTER";
private FTPFile[] dataset;

//some methods and stuff...

public static class ViewHolder extends RecyclerView.ViewHolder {
public final String TAG = "FILES_VH";
private final TextView nameTextView;
private final TextView infoTextView;
private final ImageView imageView;

public ViewHolder(View v) {
super(v);
// Define click listener for the ViewHolder's View.
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "Element " + getPosition() + " clicked.");
//here i want to open the dialog fragment and start downloading/openning

}
});
nameTextView = (TextView) v.findViewById(R.id.fileNameTextView);
infoTextView = (TextView) v.findViewById(R.id.fileInfoTextView);
imageView = (ImageView) v.findViewById(R.id.fileImageView);
}

public TextView getNameTextView() {
return nameTextView;
}

public ImageView getImageView() {
return imageView;
}

public TextView getInfoTextView() {
return infoTextView;
}
}

}

非常感谢您的帮助,谢谢。

最佳答案

所以我找到了一个解决方案,我在 onBindViewHolder() 上使用匹配的参数创建了一个自定义 OnClickListener ,并将其设置为 ViewHolder :
ViewHolder:

 public static class ViewHolder extends RecyclerView.ViewHolder {
private final TextView nameTextView;
private final TextView infoTextView;
private final ImageView imageView;
public final String TAG = "FILES_VH";
private View v;

public ViewHolder(View v) {
super(v);
this.v = v;
nameTextView = (TextView)v.findViewById(R.id.fileNameTextView);
infoTextView = (TextView)v.findViewById(R.id.fileInfoTextView);
imageView = (ImageView)v.findViewById(R.id.fileImageView);
}

public void setOnClickListener(View.OnClickListener listener){
v.setOnClickListener(listener);
}

}

我的自定义监听器:

private class downloadOnClickListener implements View.OnClickListener{
RemoteFilesFragment fragment;
String file;

public downloadOnClickListener(RemoteFilesFragment fragment, String file){
this.file = file;
this.fragment = fragment;
}

@Override
public void onClick(View v) {
Log.d(TAG, "File " + file + " clicked.");
DownloadDialog dialog = DownloadDialog.newInstance(file);
dialog.setTargetFragment(fragment, 1);
Log.e(TAG, fragment == null ? "fragment null" : "fragment not null");
FragmentManager fm = fragment.getActivity().getSupportFragmentManager();
dialog.show(fm, "Download");
}
}

并在 onBindViewHolder() 上添加以下代码:

holder.setOnClickListener(new downloadOnClickListener(fragment, dataset[position].getName()));

关于java - 在 RecyclerView.Adapter 中单击时传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33242626/

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