我有一个片段,它通过类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
时,错误说它OnRequestComplete
想要一个上下文而不是一个片段。
那么应该通过什么代替??? ?我不想在活动中实现DataProcessInterface
接口,然后使用另一个接口来显示片段中的数据。
答案 0 :(得分:1)
一个片段不是一个Context,它可能有一个Context。您将上下文传递给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));
更新: 请注意,我认为你是因为这个设计而受到伤害的世界。你冒着泄露上下文和碎片的风险。