我使用EditTransactionActivity中的以下代码创建了一个自定义侦听器:
private OnTransactionUpdateListener mTranUpdateListener;
public interface OnTransactionUpdateListener {
public void transactionUpdated(Tran tran);
}
public void setTransactionUpdateListener(OnTransactionUpdateListener listener) {
this.mTranUpdateListener = listener;
}
我使用以下方法调用该方法:
mTranUpdateListener.transactionUpdated(mTransaction);
在TransactionDetailActivity中,我使用以下方法实现了该类:
@Override
public void transactionUpdated(Tran tran) {
this.mTransaction = tran;
}
我遇到的问题是侦听器尚未设置,因为我使用Intent加载EditTransactionActivity,如何设置侦听器?我没有要设置的对象的实例。
Intent intent = new Intent(getApplicationContext(),
EditTransactionActivity.class);
Bundle bundle = new Bundle(
bundle.putSerializable("transaction_key", mTransaction);
intent.putExtras(bundle);
startActivity(intent);
答案 0 :(得分:1)
有一些关于你的代码的说明应该是正确的
1)你不能将interface
(行为)直接传递给作为Serializable
对象的bundle,你应该传递一个类的对象,这个类必须实现Serializable
和{{ 1}}接口。
2)即使您执行第一个音符,也不会设置侦听器,您应该在活动的OnTransactionUpdateListener
方法中手动执行此操作以从附加内容中获取onCreate
对象并更新听众变量。
Serializable
注意:您可以使用// psudu code
// in onCreate method of the EditTransactionActivity we will read and set listener
if (getIntent().getExtras() != null &&
getIntent().getExtras().containsKey("transaction_key")) {
Serializable serializableObject= getIntent().getExtras().getSerializable("transaction_key");
if (serializableObjecte instanceof OnTransactionUpdateListener) {
mTranUpdateListener= (OnTransactionUpdateListener) serializableObject;
}
}
界面而不是Parcelable
界面。 Serializable
是一个Android专用界面,您可以自己实现序列化。创建它的效率远远高于Parcelable
。
http://developer.android.com/reference/android/os/Parcelable.html
答案 1 :(得分:1)
我已经解决了它通过onActivityResult()传递Intent的问题。谢谢您的帮助。