如何在没有上下文的情况下显示弹出消息
我们正在开发一个将在JVM
和Android
使用的库。 现在我们需要实施试用期通知。 在其他平台(.Net和Mac)中显示弹出式消息框就足够了。 但到目前为止,我无法找到一种方法来为Android做到这一点。
问题是要显示一些消息(吐司或AlertDialog),我需要有一个实际的上下文。 但是由于我们的库不包含UI元素,并且不以任何方式与UI相关,所以我们不会要求用户在创建组件时传递上下文。
简而言之:
使用抽象的工厂模式。
您的抽象工厂将允许您创建对话框和其他通知。 然后你将有2个具体的实现来创建Android版本或通知的JVM版本。
例:
/*
* The abstract factory
*/
public abstract class NotificationFactory {
/**
* Pops a message up for the user.
*
* @param msg
*/
public abstract void newToast(String msg);
// other notifications can go here
}
/**
* Concrete Android notification factory
*
*/
public final class AndroidNotificationFactory extends NotificationFactory {
private final Context context;
public AndroidNotificationFactory(Context context) {
this.context = context;
}
@Override
public void newToast(String msg) {
// normal Android toast stuff using the context
}
}
/**
* Concrete JVM Notification factory
*
*/
public final class JvmNotificationFactory extends NotificationFactory {
@Override
public void newToast(String msg) {
// JVM toast stuff
}
}
/**
* A singleton used for accessing the factory.
*
*/
public enum Library {
Instance;
private NotificationFactory notificationFactory;
public NotificationFactory getNotificationFactory() {
// nb: add synchronized if needed
return notificationFactory;
}
public void setNotificationFactory(NotificationFactory notificationFactory) {
// nb: add synchronized if needed
this.notificationFactory = notificationFactory;
}
public void InitForAndroid(Context context) {
setNotificationFactory(new AndroidNotificationFactory(context));
}
public void InitForJvm() {
setNotificationFactory(new JvmNotificationFactory());
}
}
public class ExampleUsage {
/**
* @param args
*/
public static void main(String[] args) {
// init the library
// Library.Instance.InitForAndroid(context); //or:
Library.Instance.InitForJvm();
// usage
Library.Instance.getNotificationFactory().newToast("Test");
}
}
使用需要在创建后能够调用方法的对话框,您需要创建一个IDialog
接口以及实现该接口的具体Android和JVM包装。
看起来,如果没有上下文,您确实无法显示Toast和AlertDialog。 最接近的变体是在用户应该实现的库中提供一些接口。
链接地址: http://www.djcxy.com/p/60743.html