You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中library模块如何调用主app模块的refresh刷新函数

实现方案

因主app模块依赖library模块,不能反向依赖,采用以下两种解耦方案实现跨模块调用,按需选择即可:

方案一:利用Activity返回结果实现(无需修改library核心逻辑,推荐)

你当前的library代码在校验成功后已经执行了setResult(RESULT_OK),直接在主app侧监听Activity返回结果即可实现需求:

  1. 首先修改主app模块BaseActivity中refresh()方法的可见性,从private改为protected:
// 主app模块 BaseActivity.kt
protected fun refresh() {
    //原有刷新逻辑
}
  1. 在BaseActivity中注册Activity返回结果监听,替换原有启动逻辑:
open class BaseActivity : AppCompatActivity() {
    lateinit var pref: PreferenceManager
    lateinit var repository: BasicRepository

    // 注册验证码页面返回结果监听
    private val pinCodeLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        if (result.resultCode == RESULT_OK) {
            // 验证码校验成功,触发刷新
            refresh()
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        pref = PreferenceManager(this)
        setupContentWindow()
    }

    override fun onResume() {
        super.onResume()
        if (pref.checkCredential()) {
            val intent = PinCodeActivity.intent(this, true, pref.token())
            // 用注册的launcher启动页面,替换原有startActivity
            pinCodeLauncher.launch(intent)
        } else {
            // 无需跳验证码时直接刷新
            refresh()
        }
    }

    protected fun refresh() {
        //原有刷新逻辑
    }
}

注意:原onResume逻辑不管是否跳转验证码都会执行refresh(),此处做了逻辑优化,避免跳转前多余刷新,若需要保留原有逻辑可自行调整。


方案二:接口回调方案(适合校验成功后无需等待页面销毁就要回调的场景)

  1. 首先在library模块定义公共回调接口(注意和library代码语言统一用Java定义):
// library模块 VerificationCallback.java
public interface VerificationCallback {
    void onVerificationSuccess();
}
  1. 修改library模块的PinCodeActivity,支持传入回调、校验成功触发回调:
// library模块 PinCodeActivity.java
public class PinCodeActivity extends Activity {
    private static VerificationCallback verificationCallback;

    // 对外暴露设置回调的静态方法
    public static void setVerificationCallback(VerificationCallback callback) {
        verificationCallback = callback;
    }

    private void checkCode(String pin, String token) {
        APIManager.getInstance().verifyCode(token, pin, new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
                String responseUser = response.body();
                if (response.code() == 200) {
                    // 注意Java字符串比较要使用equals,不要用==
                    if ("true".equals(responseUser)) {
                        setResult(RESULT_OK);
                        // 校验成功触发回调
                        if (verificationCallback != null) {
                            verificationCallback.onVerificationSuccess();
                            // 用完置空避免内存泄漏
                            verificationCallback = null;
                        }
                        finish();
                    } else {
                        //原有逻辑
                    }
                } else {
                    //原有逻辑
                }
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {
                //原有逻辑
            }
        });
    }

    // 页面销毁时清空回调避免内存泄漏
    @Override
    protected void onDestroy() {
        super.onDestroy();
        verificationCallback = null;
    }
}
  1. 在主app模块的BaseActivity中设置回调实现:
open class BaseActivity : AppCompatActivity() {
    lateinit var pref: PreferenceManager
    lateinit var repository: BasicRepository

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        pref = PreferenceManager(this)
        setupContentWindow()
        // 设置验证码校验成功回调
        PinCodeActivity.setVerificationCallback(object : VerificationCallback {
            override fun onVerificationSuccess() {
                refresh()
            }
        })
    }

    override fun onResume() {
        super.onResume()
        if (pref.checkCredential()) {
            val intent = PinCodeActivity.intent(this, true, pref.token())
            startActivity(intent)
        }
        refresh()
    }

    protected fun refresh() {
        //原有刷新逻辑
    }

    override fun onDestroy() {
        super.onDestroy()
        // 页面销毁时清空回调避免内存泄漏
        PinCodeActivity.setVerificationCallback(null)
    }
}

内容的提问来源于stack exchange,提问作者14079_Z

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:24:04