片段上下文不是回调实例

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。您最简单的解决方案是在包含FragmentActivity(即Context)中实现您的Callback

【讨论】:

以上是关于片段上下文不是回调实例的主要内容,如果未能解决你的问题,请参考以下文章

回调函数实例—

ios block和delegate的区别

卡住了从活动到片段的移植

使用类方法作为回调时的 Promise.then 执行上下文

获取 NSManagedObject 实例的上下文是不是是线程安全的?

Provider 实例之间是不是共享从 React 中的相同上下文派生的上下文值?