我有一个Recylerview
,其中Button
和TextView
作为参数。点击按钮时,我打开的是文件选择器。
@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
之外。
答案 0 :(得分:2)
少量笔记
ViewHolder
的{{1}}参数应该仅由holder
类本身来管理。
您可以做什么
使用{Adapter
,onActivityResult
,List
等本地存储,为从SharedPreferences
收到的当前选定文件保留引用。等)
使用列表中的最新文件项再次填充文件选择器适配器
调用Realm
public void notifyDataSetChanged()
通知附加的观察者基础数据已更改,任何反映数据集的View均应刷新自身。
了解更多信息
答案 1 :(得分:1)
您将需要在数据集中设置文件名。
然后在“活动结果”中致电notifyDataSetChange()
。
答案 2 :(得分:0)
您不应在适配器本身中处理单击事件。而是使用界面将它们转发回活动/片段。
因此,当您单击该按钮时,将在活动/片段中调用该界面的方法,从中您可以轻松地检测到onActivityResult()
方法。
因此,当您获得名称时,请在适配器数据集中更新该值,并通知适配器进行更改。
像这样的简单界面(代码在Kotlin中)
interface OnClickListener {
fun onClick(position:Int)
}
并让您的活动实现它。现在,在您的适配器类构造函数中,将接口作为参数传递。
AdapterClass(private val listener: OnClickListener)