我在 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);
最佳答案
关于你的代码有一些注意事项应该是正确的
1) 你不能将interface
(行为)直接传递给bundle作为Serializable
对象,你应该传递一个类的对象,这个类必须实现Serializable
和 OnTransactionUpdateListener
接口(interface)。
2) 即使你做了第一个note,监听器也不会被设置,你应该在activity的onCreate
方法中手动做,以获得Serializable
对象从 extras 中更新监听器变量。
// 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
接口(interface)而不是使用Serializable
接口(interface)。 Parcelable
是一个 Android 特定接口(interface),您可以在其中自行实现序列化。它的创建远比 Serializable
高效。
http://developer.android.com/reference/android/os/Parcelable.html
关于android - 使用 Intent 的自定义监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30087361/