使用Intent的自定义侦听器

时间:2015-05-06 20:56:34

标签: android android-intent listener

我使用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);

2 个答案:

答案 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的问题。谢谢您的帮助。