【问题标题】:Custom Listener using Intent使用 Intent 的自定义监听器
【发布时间】:2015-07-17 05:12:29
【问题描述】:

我在 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);

【问题讨论】:

  • 如果我理解正确,您希望在两个活动之间进行通信?
  • 是的,当我在 EditTransactionActivity 中保存数据时,我调用了 finish() 但我想先将一个对象传回。
  • 从以下解决方案修改模型解决方案以使用您的界面。 stackoverflow.com/questions/19026515/…
  • 基本上你会想做一个单例来保存你的界面
  • 那里有三个类,我的界面在我的一个活动中。

标签: android android-intent listener


【解决方案1】:

关于你的代码有一些注释应该是正确的

1) 不能将interface(行为)作为Serializable对象直接传递给bundle,你应该传递一个类的对象,并且这个类必须实现SerializableOnTransactionUpdateListener接口。

2) 即使你做了第一个note,也不会设置监听器,你应该在activity的onCreate方法中手动做,从extras中获取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 接口。 Parcelable 是一个 Android 特定接口,您可以在其中自己实现序列化。它的创建比Serializable 更有效率。

http://developer.android.com/reference/android/os/Parcelable.html

【讨论】:

  • 你会得到一个类转换异常吗?监听器 - 事务
  • 你是对的,所以我们应该先检查一下。 (我已经更新了代码)
  • NullPointerException 到底在哪里?
【解决方案2】:

我已经解决了它通过 onActivityResult() 传递 Intent。谢谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2015-04-19
    • 2017-02-18
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多