将片段上下文传递给通过接口执行片段中方法的类

问题描述:

我有一个片段,它通过类NetworkConnector初始化下载过程以及侦听完成下载的R​​equestCompleteListener类。将片段上下文传递给通过接口执行片段中方法的类

NetworkConnector

这个类的构造函数
public NetworkConnector(Context ctx, String url, String methodType, int downloadId, 
      ArrayList<ArrayList<String>> postData, RequestCompleteListener<String> listener) 

不下载,并通过一个名为RequestCompleteListener接口,执行方法OnRequestExecuted。

public class OnRequestComplete implements RequestCompleteListener<String> { 
private DataProcessInterface dataProcessInterface; 

public OnRequestComplete(Context context) { 
    dataProcessInterface = (DataProcessInterface) context; 
} 

@Override 
public void onRequestExecuted(String responseType, String result, int downloadId) { 
    if (!responseType.equals("error")) { 
     dataProcessInterface.processData(result, downloadId); 
    } else { 
     dataProcessInterface.processError(result, downloadId); 
    } 
} 
} 

该片段实现了接口DataProcessInterface。而OnRequestCompleted方法通过接口使用片段执行方法processData和processError。

public class FoodListFragment extends Fragment implements DataProcessInterface { 

从活动执行时,此过程完全正常。但是当这通过一个片段完成时,我得到ClassCastException,因为它需要片段的上下文来代替???下面。

new NetworkConnector(getActivity(), url, "GET", 101, null, new OnRequestComplete(???)); 

getActivity()view.getContext()没有明显的原因工作。当我尝试FoodListFragment.this时,错误表示它想要一个上下文而不是片段。

那么应该通过什么来代替??? ?我不想在活动中实现接口DataProcessInterface,然后使用另一个接口在片段中显示数据。

片段不是一个上下文,它可能有一个上下文。您正在将上下文传递给OnRequestComplete实例,并试图将其转换为DataProcessInterface。为了清晰起见,您可能应该直接传递界面。

public class OnRequestComplete implements RequestCompleteListener<String> { 
    private DataProcessInterface dataProcessInterface; 

    public OnRequestComplete(DataProcessInterface dpi) { 
     dataProcessInterface = context; 
    } 
<....> 
    } 

现在下面应该工作。

new NetworkConnector(getActivity(), url, "GET", 101, null, new OnRequestComplete(FoodListFragment.this)); 

更新: 注意,我觉得你在伤害这个世界上,这样的设计寿是。你冒着泄漏上下文和片段的风险。