将片段上下文传递给通过接口执行片段中方法的类
问题描述:
我有一个片段,它通过类NetworkConnector初始化下载过程以及侦听完成下载的RequestCompleteListener类。将片段上下文传递给通过接口执行片段中方法的类
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));
更新: 注意,我觉得你在伤害这个世界上,这样的设计寿是。你冒着泄漏上下文和片段的风险。