片段上下文不是回调实例
Posted
技术标签:
【中文标题】片段上下文不是回调实例【英文标题】:Fragment context not instance of callback 【发布时间】:2022-01-21 20:37:12 【问题描述】:class Fragment extends Fragment() implements Callback
@Ovverride
onCreate(SavedInstanceState savedInstanceState)
Adapter adapter = new Adapter(getContext())
@Ovverride
someCallbackMethod() // Code when callback is called
class Adapter extends RecyclerView.Adapter<VH>()
Context context;
public Adapter(Context context) this.context = context
class VH extends RecyclerView.ViewHolder
private void bind()
button.setOnClickListener (v->
BottomSheet sheet = BottomSheet.newInstance(variable);
sheet.show(((FragmentActivity) context).getSupportFragmentManager(),
sheet.getClass().getName());
)
class BottomSheet extends BottomSheetDialogFragment
@Override
public void onAttach(@NonNull Context context)
super.onAttach(context);
if (context instanceof Callback) listener =
(Callback) context;
else Log.v("BottomSheet", "Not instance");
即使主片段实现了回调,该片段的上下文也永远不是回调的实例,这可能是什么原因以及如何修复它。 注意:这里和那里可能会有一些错误,因为我对这些类做了一个通用的视图。
【问题讨论】:
new Adapter(getContext())
- 而不是 getContext()
传递 this
。您的片段包含回调侦听器,因此您需要传递片段的引用。另外你的代码不应该在onCreate()
片段中
@Nitish 将此作为参数传递会导致错误,指出预期类型是 Context 但类型为 Fragment
这里也需要改一下Adapter(Context context)
,再增加一个Callback
类型的参数,.如果你想听回调,
这行不通,因为我必须将回调变量分配给 onAttach 中的底部工作表以避免崩溃
我昨天回答了一个类似的问题。 have a look.
【参考方案1】:
Fragment
不继承自 Context
。您最简单的解决方案是在包含Fragment
的Activity
(即Context
)中实现您的Callback
。
【讨论】:
以上是关于片段上下文不是回调实例的主要内容,如果未能解决你的问题,请参考以下文章
使用类方法作为回调时的 Promise.then 执行上下文