使用 Intent 的自定义侦听器
Custom Listener using Intent
我在 EditTransactionActivity 中使用以下代码创建了自定义侦听器:
private OnTransactionUpdateListener mTranUpdateListener;
public interface OnTransactionUpdateListener {
public void transactionUpdated(Tran tran);
}
public void setTransactionUpdateListener(OnTransactionUpdateListener listener) {
this.mTranUpdateListener = listener;
}
我调用该方法使用:
mTranUpdateListener.transactionUpdated(mTransaction);
在 TransactionDetailActivity 中,我使用以下方法实现了 class:
@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
对象,你应该传递一个 class 的对象,而这个 class必须实现 Serializable
和 OnTransactionUpdateListener
接口。
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
接口而不是使用 Serializable
接口。 Parcelable
是一个 Android 特定接口,您可以在其中自行实现序列化。它的创建效率远高于 Serializable
.
http://developer.android.com/reference/android/os/Parcelable.html
我已经解决了通过 onActivityResult() 传回 Intent 的问题。谢谢您的帮助。
我在 EditTransactionActivity 中使用以下代码创建了自定义侦听器:
private OnTransactionUpdateListener mTranUpdateListener;
public interface OnTransactionUpdateListener {
public void transactionUpdated(Tran tran);
}
public void setTransactionUpdateListener(OnTransactionUpdateListener listener) {
this.mTranUpdateListener = listener;
}
我调用该方法使用:
mTranUpdateListener.transactionUpdated(mTransaction);
在 TransactionDetailActivity 中,我使用以下方法实现了 class:
@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
对象,你应该传递一个 class 的对象,而这个 class必须实现 Serializable
和 OnTransactionUpdateListener
接口。
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
接口而不是使用 Serializable
接口。 Parcelable
是一个 Android 特定接口,您可以在其中自行实现序列化。它的创建效率远高于 Serializable
.
http://developer.android.com/reference/android/os/Parcelable.html
我已经解决了通过 onActivityResult() 传回 Intent 的问题。谢谢您的帮助。