2012-06-25 24 views
7

Hem JVM hem de Android içinde kullanılacak bir kitaplık geliştiriyoruz. Ve şimdi deneme süresi bildirimini uygulamaya koymamız gerekiyor. Bir açılır ileti kutusu gösteren diğer platformlarda (Net ve Mac) yeterliydi. Ancak şu ana kadar Android için bunu yapmanın bir yolunu bulamıyorum. Sorun, bir mesajın (tost veya AlertDialog) gösterilmesi için, gerçek bir içeriğe sahip olmamız gerektiğidir. Ancak, kütüphanemiz UI öğeleri içermediğinden ve herhangi bir şekilde UI ile ilgili olmadığı için, bir kullanıcı bileşen oluştururken içerikten geçmesini istemeyiz. Bir bağlam olmadan pop-up mesaj nasıl gösterilir

Kısa olarak:

  • nasıl kullanıcı kodu geçirilen bir bağlam REFERANS kalmadan tost (AlertDialog, Bildirim) gösterebilir.
  • Android'de ve Java'da deneme modunu uygulamak için daha iyi çözümlere sahip olamam.
+1

Bağlam olmadan hiçbir şey yapamazsınız. belki de bildirimler için bir arabirim sağlayın ve kullanıcının bu arabirimi kullanmasına izin verin –

cevap

1

Görünüşe göre, ne Tüneli ne de AlertDialog'u bir bağlam olmadan gösteremezsiniz. En yakın varyasyon, kütüphanenizde kullanıcının kullanması gereken bir arayüz sağlamaktır.

3

Abstract factory pattern'u kullanın.

Özet fabrikanız, iletişim kutuları ve diğer bildirimler oluşturmanıza izin verecektir. Daha sonra, Android sürümünü veya bildirimin JVM sürümünü oluşturan 2 somut uygulamaya sahip olacaksınız.

Örnek: oluşturulmasından sonra yöntemlerini çağırmak edebilmek için ihtiyaç iletişim kutuları ile

/* 
* 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"); 

    } 

} 

, bir IDialog arayüzü ve bu arabirim uygulamak beton Android ve JVM sarmalayıcılarını yapmak gerekir.

+0

Teşekkürler, bu, bildirimleri platformdan bağımsız şekilde nasıl gösterileceğine iyi bir örnektir. Ancak sorunun özü, UI'yi kitaplığımdan göstermeye nasıl zorlanır. Ve şimdi görünüyor ki, bağlamı referans almadan bunu yapamam. – Antonio

İlgili konular