Android:将接口放入意图

4

我在我的应用程序中有一个自定义对话框。我的自定义对话框实现为具有透明背景和类似于对话框视图的Activity。我的自定义对话框看起来像警告对话框,带有标题、消息和按钮。我想要做的是创建一个漂亮的界面来设置我的弹出窗口的标题、消息和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对象。
如何实现?如何为我的自定义弹出窗口编写漂亮的界面?因为弹出窗口可以有不同的标题和消息,并且弹出窗口将在许多活动中使用...提前致谢。

所以,你为什么不使用实际的对话框? - dmon
除了标题和消息之外,还有更多的视图,但我不想让我的问题变得更加复杂。 - Jim
为什么不添加一个键“clicklistener”,值为true的额外选项呢?如果设置为true,则在接收的Activity类中创建OnClickListener() - tolgap
因为按钮点击可能会有不同的操作。有些只是关闭弹出窗口,有些则可以启动另一个活动。 - Jim
为什么不直接使用对话框或对话框片段? - toadzky
在布局方面,您可以按照文档中的示例自定义对话框并进行任何想要的操作。http://developer.android.com/guide/topics/ui/dialogs.html#CustomLayout - dmon
4个回答

1
创建一个实现OnClickListener和Serializable接口的类。通过Intent将一个实例发送到“对话框”中。

0

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

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

请查看我的完整答案https://dev59.com/JXHYa4cB1Zd3GeqPP8tE#37071472


0
如果弹出窗口的行为有所不同,可以创建CustomPopup的子类来包含这些行为。您仍然可以传递这些侦听器需要执行操作的数据。

-1
只需将一个 `Serializable` 扩展到这个接口即可:

像这样:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接