2016-11-08 3 views
0

다운로드 완성을 청취하는 RequestCompleteListener 클래스와 함께 NetworkConnector 클래스를 통해 다운로드 프로세스를 초기화하는 프래그먼트가 있습니다.프래그먼트의 컨텍스트를 인터페이스를 통해 프래그먼트의 메소드를 실행하는 클래스에 전달합니다.

이 클래스 생성자 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

조각은 컨텍스트가 아니며 컨텍스트를 가질 수 있습니다. 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)); 

업데이트 : 주, 난 당신이 디자인 상점과 상처의 세계를 위해 안으로 생각합니다. 컨텍스트와 파편을 누출시킬 위험이 있습니다.

관련 문제