2012-05-13 75 views
2

作爲參數傳遞活動所以這裏是交易。無法通過方法

我創建了一個用戶定義的類。它包含一個返回通知對象的方法。現在我想讓這個方法有點靈活。就像傳遞用戶在通知欄中單擊通知時打開的活動一樣。這裏的方法

public Notification getUserNotificationObject(String status, String message, String tickerText, boolean isOngoingEvent){ 
    Notification notification = new Notification(R.drawable.image, tickerText, System.currentTimeMillis()); 

    long vibInterval = (long) context.getResources().getInteger(R.integer.vibrateInterval); 

    notification.vibrate = new long[] {vibInterval, vibInterval, vibInterval, vibInterval, vibInterval}; 

    Intent notifyIntent = new Intent(context, HomeScreen.class); 
    CharSequence contentTitle = "Title"; 
    CharSequence contentText = status + "-" + message; 
    notification.setLatestEventInfo(context, contentTitle, contentText, PendingIntent.getActivity(context, 0, notifyIntent, PendingIntent.FLAG_CANCEL_CURRENT)); 

    notification.ledARGB = Color.argb(100, 0, 254, 0); 
    notification.ledOnMS = 500; 
    notification.ledOffMS = 500;   
    notification.flags |= Notification.FLAG_SHOW_LIGHTS; 
    if(isOngoingEvent){ 
     notification.flags |= Notification.FLAG_ONGOING_EVENT; 
    } 

    return notification; 
} 

我希望能夠通過活動作爲參數,在此,而不是

HomeScreen.class 

上述意圖定義使用(這一類的用戶提供額外的控制(或其他開發人員)選擇在單擊通知時打開哪個活動)。我試着用活動作爲此方法的參數之一,但每當我試圖通過同時調用此方法,如「活性2」或「Activity2.this」另一個活動它給了我錯誤說:

No enclosing instance of the type Activity2 is accessible in scope 

有什麼解決此問題或以任何方式將活動作爲參數傳遞。或者我應該區分那些基於NotificationID的。

在這方面的任何幫助或上述代碼的任何更正是值得歡迎的。 (「context」是一個類級別的變量,所以不用擔心,這段代碼工作正常)。

回答

2

HomeScreen.class的類型是Class。所以你可以傳遞一個Class的實例來表示下一個活動。例如(格式化的可讀性):

public Notification getUserNotificationObject(
    String status, 
    String message, 
    String tickerText, 
    boolean isOngoingEvent, 
    Class nextActivityClass) { 

,並呼籲有:

getUserNotificationObject(..., HomeScreen.class) 

更靈活,不過,可能是一個Intent傳遞給你的函數。這樣,調用者可以按照他們想要的方式創建Intent,並且如果他們需要,可以允許他們向意圖添加額外的數據。在函數內部創建new Intent不允許這種靈活性。

public Notification getUserNotificationObject(
    String status, 
    String message, 
    String tickerText, 
    boolean isOngoingEvent, 
    Intent nextIntent) { 

,並呼籲有:

Intent intent = new Intent(context, HomeScreen.class); 
getUserNotificationObject(..., intent) 
+0

我也和班級一起嘗試過,而且我也有同樣的感覺。但意圖是一個好主意。感謝Greg。答案接受:D – drulabs

-1

只需創建一個活動對象/實例一樣新YourActivity()

public static void Redirect(Context context,Activity page) { 

..... //code 

context.startActivity(new Intent(context,page.getClass())); 

((Activity) context).finish(); 
} 

,並使用此方法,因爲

Redirect(Registration.this, new YourActivity()); 
0

這是沒有必要通過Activity。你可以很容易地通過一個Context,然後將其轉換爲Activity象下面這樣:

public class SomeClass { 
    public SomeClass(Context context){ 

     // using context as activity 
     Window win = ((Activity) context).getWindow(); 

     // your code 
    } 
} 

希望你覺得它有用!