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

时间:2016-11-08 13:43:18

标签: android android-fragments interface

我有一个片段,它通过类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接口,然后使用另一个接口来显示片段中的数据。

1 个答案:

答案 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));

更新: 请注意,我认为你是因为这个设计而受到伤害的世界。你冒着泄露上下文和碎片的风险。