2012-06-25 34 views
7

Chúng tôi đang phát triển thư viện sẽ được sử dụng cả trong JVMAndroid. Và bây giờ chúng ta cần phải thực hiện thông báo thời gian dùng thử. Trong các nền tảng khác (.Net và Mac) hiển thị một hộp thông báo bật lên là đủ. Nhưng cho đến nay tôi không thể tìm thấy một cách để làm điều này cho Android.Cách hiển thị thông báo bật lên mà không có ngữ cảnh

Vấn đề là để hiển thị một số thông báo (bánh mì nướng hoặc AlertDialog), tôi cần phải có ngữ cảnh thực tế. Nhưng vì thư viện của chúng tôi không chứa các phần tử giao diện người dùng và không liên quan đến giao diện người dùng theo bất kỳ cách nào, chúng tôi không yêu cầu người dùng chuyển ngữ cảnh khi tạo ra các thành phần.

Để có ngắn:

  • làm thế nào tôi có thể hiển thị một Toast (AlertDialog, Notification) mà không có một refference bối cảnh truyền từ mã người dùng.
  • Nếu tôi không thể có ai đó có giải pháp tốt hơn để triển khai chế độ dùng thử trên Android và Java.
+1

bạn không thể làm gì nếu không có ngữ cảnh. có thể cung cấp giao diện cho thông báo và cho phép người dùng triển khai giao diện này –

Trả lời

1

Dường như bạn thực sự không thể hiển thị cả Bánh mì nướng cũng như AlertDialog mà không có ngữ cảnh. Biến thể gần nhất là cung cấp một số giao diện trong thư viện của bạn mà người dùng nên triển khai.

3

Sử dụng Abstract factory pattern.

Nhà máy trừu tượng của bạn sẽ cho phép bạn tạo hộp thoại và các thông báo khác. Sau đó, bạn sẽ có 2 triển khai cụ thể tạo phiên bản Android hoặc phiên bản JVM của thông báo.

Ví dụ:

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

    } 

} 

Với hộp thoại mà bạn cần để có thể gọi phương pháp trên sau khi tạo, bạn cần phải thực hiện một giao diện IDialog và bê tông Android và JVM giấy gói mà thực hiện giao diện đó.

+0

Cảm ơn, đây là ví dụ tốt về cách hiển thị thông báo theo cách độc lập trên nền tảng. Nhưng bản chất của câu hỏi là làm thế nào để buộc hiển thị giao diện người dùng từ thư viện của tôi. Và có vẻ như bây giờ, tôi không thể làm điều này mà không tham chiếu đến ngữ cảnh. – Antonio

Các vấn đề liên quan