startActivity
中的recyclerView adapter
可以正常工作,但是当我尝试在startActivityForResult
中的recyclerView adapter
并覆盖onActivityResult
(在mainActivity中)时,则无法正常工作。
答案 0 :(得分:0)
在kotlin中,您可以尝试在类Adapter内将函数作为参数传递给适配器:
class MyAdapter(val context: Context,
val list: List<Any?>,
val onClickFunction: ((Any?) -> Unit)? = null) {
// previous class's properties and functions ..
fun override onBindViewHolder(holder: MyHolder, position: Int) {
// previous code ..
holder.whatEverYouWantClick.setOnClickListener {
this@MyAdapter.onClickFunction?.invoke(list.get(position));
}
}
}
,然后在“ setRecyclerView”函数中输入以下内容:
mRecyclerView.adapter = MyAdapter(context, listOfWhatEverIWant) {
// the on click will run here
// storage the results ..
this.finish()
}
如果您不了解我在做什么,则向一个传递给适配器的函数传递信息,该函数在单击一个特定的position元素时运行,此函数设置结果并完成以返回调用者活动的结果。
答案 1 :(得分:0)
您做错了,不是您的适配器来处理单击操作。我建议您创建一个接口来创建侦听器:
public interface AdapterItemClickListener<T>
{
void onItemClicked(final T item);
}
然后,在适配器构造函数中,您将具有以下内容:
private final AdapterItemClickListener<Object> _listener;
ListAdapter(final AdapterItemClickListener<Object> listener)
{
_listener = listener;
}
所以当您绑定时(我没有代码,所以我想您正在使用RecyclerView.Adapter)
@Override
public void onBindViewHolder(final ViewHolder holder, final int position)
{
holder.itemView.setOnClickListener(v -> _listener.onItemClicked(getItem(position)));
}
您的活动将需要实现该接口,然后您必须像这样在不活动状态下创建适配器:
_adapter = ListAdapter(this);
结束添加此方法
private void onItemClicked(final Object item)
{
startActivityForResult(Intent);
}