我有一个Recylerview,Button和TextView作为params。我正在打开一个文件选择器按钮点击。
@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
@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之外。
发布于 2019-01-22 10:54:19
几个注意事项
ViewHolder的holder参数应该仅由Adapter类本身管理。
你能做什么
onActivityResult接收到的当前选定文件/s的引用,或者使用本地存储(List、SharedPreferences、Realm等)。notifyDataSetChanged()公开无效notifyDataSetChanged () 通知附加的观察者基础数据已经更改,任何反映数据集的视图都应该刷新自己。
阅读关于的更多信息
发布于 2019-01-22 10:07:14
您需要在DataSet中设置文件名。并对活动结果调用notifyDataSetChange()。
发布于 2019-01-22 10:08:19
您不应该处理适配器本身中的单击事件。相反,使用接口将它们转发回活动/片段。
因此,当您单击按钮时,将在活动/片段中调用接口的方法,从它们中您可以很容易地检测到onActivityResult()方法。
因此,当您获得名称时,在适配器数据集中更新该值并通知适配器更改。
像这样的简单接口(代码在Kotlin中)
interface OnClickListener {
fun onClick(position:Int)
}让你的活动实现它。现在,在适配器类中,构造函数将接口作为参数传递。
AdapterClass(private val listener: OnClickListener)https://stackoverflow.com/questions/54305717
复制相似问题