在RecyclerView.Adapter中单击传递数据

时间:2015-10-20 17:05:00

标签: java android android-fragments android-adapter android-recyclerview

我的片段上有 .globl give_both .type give_both, @function give_both: .LFB0: .file 1 "ab.c" .loc 1 7 0 .cfi_startproc .LVL0: .loc 1 7 0 xorl %edx, %edx # D.2139 movq %rdi, %rax # x, x movb %sil, %dl # y, D.2139 ret .cfi_endproc ,显示我从FTP服务器加载的某些文件。 我正在尝试为每个项目设置RecyclerView,因此当点击它时,将显示onClickListener,用户可以在其中选择是下载还是打开文件。
我的问题是:
我需要向我的对话框发送两件事:

  1. 目标片段,在用户选择要执行的操作后下载/打开文件。这可能很容易与DialogFragment无关,唯一的问题是我无法访问setTargetFragment()中的片段。
  2. 要下载/打开的文件的名称。这样对话框就会将其发送到目标片段。这里的问题是我无法访问RecyclerView.ViewHolder中的数据集,因为它的静态和我的数据集不是。
  3. 为何选择ViewHolder
    如果有更好的地方,我会很高兴听到。我在RecyclerView.ViewHolder内尝试的原因是它可以访问该位置(被点击的项目)。我已经考虑过在RecyclerView.ViewHolder上执行此操作,但是我可以访问数据集,但不能访问该位置。

    我的适配器代码:

    onBindViewHolder()

    非常感谢帮助,谢谢。

1 个答案:

答案 0 :(得分:4)

所以我找到了一个解决方案,我在OnClickListener上创建了一个带有匹配参数的自定义onBindViewHolder(),并将其设置为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()));