我有一个 base 模块,在这个模块中我有一个接口:
interface BaseNavigationInterface : Serializable{
fun onItemClicked(navItemId: Int)
}
我有一个市场模块,在这个模块中,我有一个使用此静态方法的活动:
companion object {
@JvmStatic
fun newIntent(context: Context, navInterface: BaseNavigationInterface) : Intent {
var intent = Intent(context, MarketActivity::class.java)
intent.putExtra("interface", navInterface)
return intent
}
}
在我的其他模块(这是 app 模块)中,我想像这样启动 market 模块:
startActivity(MarketActivity.newIntent(this, navigationInterface));
navigationInterface是我活动中的一个类变量:
private BaseNavigationInterface navigationInterface = (BaseNavigationInterface)(new BaseNavigationInterface() {
@Override
public void onItemClicked(int navItemId) {
}
});
我的问题是,当我的程序调用startActivity()方法并调用MarketActivity.newIntent()方法时,navigationInterface参数的类型是MainActivity。 为什么呢?
我遇到了这个例外:
java.lang.RuntimeException:Parcelable遇到IOException编写可序列化对象(name = my.app.activities.MainActivity $ 9)
纯kotlin项目中的相同代码工作正常,但现在我有一个混合项目。 (app模块是java,oders是kotlin模块)
答案 0 :(得分:0)
如果您想要一个可序列化的回调,您可以使用https://developer.android.com/reference/android/os/ResultReceiver.html
ResultReceiver receiver = new ResultReceiver(new Handler()) {
protected void onReceiveResult(int resultCode, Bundle resultData) {
val navItemId: Int = resultData.get...
}
}
intent.putExtra("interface", receiver )