首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ViewHolder中访问onActivityResult参数

在ViewHolder中访问onActivityResult参数
EN

Stack Overflow用户
提问于 2019-01-22 10:04:15
回答 3查看 236关注 0票数 1

我有一个RecylerviewButtonTextView作为params。我正在打开一个文件选择器按钮点击。

代码语言:javascript
复制
@Override
public void onBindViewHolder(final FileChooserAdapter.MyViewHolder holder, final int position) {
    PojoClass pojoClass = pojoClassList_.get(position);
    holder.listViewName.setText(pojoClass.getListName());
    holder.fileBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent filePickIntent = new Intent(Intent.ACTION_GET_CONTENT);
            filePickIntent.setType("*/*");
            startActivityForResult(filePickIntent, 1);
        }
    });

}

现在,在选择文件之后,我将在OnActivityResult displayName变量中获取文件名。我想在holder.textview.setText(displayName);中设置onActivityResult

代码语言:javascript
复制
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case 1:
        // Get the Uri of the selected file
        Uri uri = data.getData();
        String uriString = uri.toString();
        File myFile = new File(uriString);
        String path = myFile.getAbsolutePath();


        if (uriString.startsWith("content://")) {
            Cursor cursor = null;
            try {
                cursor = getContentResolver().query(uri, null, null, null, null);
                if (cursor != null && cursor.moveToFirst()) {
                    displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
                }
            } finally {
                cursor.close();
            }
        } else if (uriString.startsWith("file://")) {
            displayName = myFile.getName();
        }
        // I want to place the holder.textview.setText(displayName) here
        break;
    }
    super.onActivityResult(requestCode, resultCode, data);
}

帮助我,如何将ViewHolder参数放置到Adapter之外。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-22 10:54:19

几个注意事项

ViewHolderholder参数应该仅由Adapter类本身管理。

你能做什么

  • 保存从onActivityResult接收到的当前选定文件/s的引用,或者使用本地存储(ListSharedPreferencesRealm等)。
  • 使用列表中的最新文件项再次填充文件选择器适配器
  • 调用notifyDataSetChanged()

公开无效notifyDataSetChanged () 通知附加的观察者基础数据已经更改,任何反映数据集的视图都应该刷新自己。

阅读关于的更多信息

票数 2
EN

Stack Overflow用户

发布于 2019-01-22 10:07:14

您需要在DataSet中设置文件名。并对活动结果调用notifyDataSetChange()

票数 1
EN

Stack Overflow用户

发布于 2019-01-22 10:08:19

您不应该处理适配器本身中的单击事件。相反,使用接口将它们转发回活动/片段。

因此,当您单击按钮时,将在活动/片段中调用接口的方法,从它们中您可以很容易地检测到onActivityResult()方法。

因此,当您获得名称时,在适配器数据集中更新该值并通知适配器更改。

像这样的简单接口(代码在Kotlin中)

代码语言:javascript
复制
interface OnClickListener {
    fun onClick(position:Int)
}

让你的活动实现它。现在,在适配器类中,构造函数将接口作为参数传递。

代码语言:javascript
复制
AdapterClass(private val listener: OnClickListener)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54305717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档