android - 使用 Intent 的自定义监听器

标签 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);

最佳答案

关于你的代码有一些注意事项应该是正确的

1) 你不能将interface(行为)直接传递给bundle作为Serializable对象,你应该传递一个类的对象,这个类必须实现SerializableOnTransactionUpdateListener 接口(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/

相关文章:

android - 保存系统信息时出错。访问被拒绝。安卓工作室

android - Android 设备属性存储在哪里?

java - 在android中解析json日期字符串

android - 关于在 Android 应用程序中实现 OBEX 的任何示例?

java - 如何从第一个 Activity 的 TextView 获取数据并从另一个 Activity 发布数据?

Android TabWidget检测点击当前标签

android - 如何在Android中的另一个模块中调用一个Activity(属于一个模块)?

android - 如何获取Share Intent回调结果

ajax - jsf 监听器未在嵌套 ui 内调用 :repeat

laravel - 事件处理程序未收到事件 Laravel