使用 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必须实现 SerializableOnTransactionUpdateListener 接口。

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() 传回 In​​tent 的问题。谢谢您的帮助。