Android:将接口放入Intent

时间:2012-10-18 20:58:33

标签: android android-intent parcelable

我的应用中有自定义对话框。我的自定义对话框我实现为具有transperent背景的Activity和视图对话框。 Mu自定义对话框看起来像警报对话框,带有标题,消息和按钮。我正在尝试做的是创建一个很好的界面来设置我的弹出窗口的标题,消息和onClickListener。

首先,我要把所有员工的意图放在:

 Intent intent = new Intent (this, CustomPopup.class);
 intent.putExta ("Title", "PopupTitle");
 intent.putExta ("Message", "PopupMessage");
 intent.putExtra ("OnCLickListener", ?????); //here is problem

 startActivity(intent);

但问题是无法将OnCLickListener用于意图。

其次,我尝试创建实现Parcable的类。 但问题是一样的

@Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(title);
        dest.writeString(message);
        dest.writeValue(buttonClickListener); // here is problem. I cannot write Interface
    }

我无法将OnCLickListener写入Parcel对象。

怎么样?如何编写自定义弹出窗口的漂亮界面?因为弹出窗口可以有不同的标题和消息,弹出窗口将用于许多活动....提前感谢

4 个答案:

答案 0 :(得分:1)

创建一个实现OnClickListener和Serializable的类。通过Intent将实例发送到"对话框"。

答案 1 :(得分:0)

如果弹出窗口的行为不同,请创建包含这些行为的CustomPopup的子类。您仍然可以传入这些侦听器需要处理的数据。

答案 2 :(得分:0)

谢谢@toadzky。 只需将不可序列化的对象作为参数传递给方法,例如:

public interface OnActionInterface {
    void onPositiveButtonClicked(Activity activity);
    void onNegativeButtonClicked(Activity activity);
}

请在https://stackoverflow.com/a/37071472/2914140查看完整的答案。

答案 3 :(得分:0)

只需将Serializable 扩展扩展到这样的界面:

public interface PlayerLambda extends Serializable {
    public void updateWatchedProgress(int progress);
}