Как вызвать статические методы во фрагменте и действиях? - PullRequest
0 голосов
/ 13 марта 2019

У меня есть метод API вызов, который вызывается либо в деятельности наш фрагмент , проблема в том, что мне нужно иметь два равных метода только с тип ( BaseActivity наш BaseFragment ) меняется следующим образом:

fun <T> BaseActivity.callAPI(call: Call<T>?, onSucceed: (T?) -> Unit) {
    callAPI(call, onSucceed, {})
}

fun <T> BaseFragment.callAPI(call: Call<T>?, listener: BaseFragment.OnFragmentInteractionListener, onSucceed: (T?) -> Unit) {
    callAPI(call, listener, onSucceed, {})
}

Есть ли способ иметь только один метод , который не включает передачу параметра, если его фрагмент является нашей деятельностью

1 Ответ

2 голосов
/ 13 марта 2019

Я думаю, вы не должны идти по этому пути, так как этот разграничивает активность и фрагмент - они оба очень разные.

Это путь, но я бы этого не сделал:

fun <T> Any.callAPI(call: Call<T>?, listener: BaseFragment.OnFragmentInteractionListener, onSucceed: (T?) -> Unit) {
    when(this){
       is BaseFragment -> performCall(call, listener, onSucceed, {})
       is BaseActivity -> performCall(call, onSucceed, {})
    }
}


fun <T> BaseActivity.performCall(call: Call<T>?, onSucceed: (T?) -> Unit, onError: (errorCode: String) -> Unit) {
    NetworkManager.instance.performCall(call,
        object : NetworkManager.OnRequestCallback<T> {
            override fun onSuccess(body: T?) {
                onSucceed(body)
            }

            override fun onError(errorCode: String?) {}

            override fun onTwoFactorRequired() {
                onAuthenticationNeeded()
            }
        }) { onAppUpdateNeeded() }
}

fun <T> BaseFragment.performCall(call: Call<T>?, onSucceed: (T?) -> Unit, onError: (errorCode: String) -> Unit) {
        NetworkManager.instance.performCall(call,
            object : NetworkManager.OnRequestCallback<T> {
                override fun onSuccess(body: T?) {
                    onSucceed(body)
                }

                override fun onError(errorCode: String?) {}

                override fun onTwoFactorRequired() {
                    onAuthenticationNeeded()
                }
            }) { onAppUpdateNeeded() }
    }
...