2017-04-19 83 views
1

我正在創建一個活動,我希望在意向包中需要特定的額外內容。要求額外傳遞給活動

我想知道最好的做法是什麼樣的。計劃不啓動,或者如果捆綁包不包含特定的額外內容,則立即結束活動。我也想通知調用者一個錯誤,說明這樣的情況。

+1

誰將會使用這個活動/威脅他們?只有你?你的開發團隊的成員?您的直屬團隊之外的人(包括普通大衆,如果這將用於分發圖書館)? – CommonsWare

+0

我的開發團隊的成員 – erik

+0

我應該補充說,額外的將被調用的活動的公共靜態枚舉..出於參數的緣故,讓我們調用該枚舉模式並說它有兩個值:A和B – erik

回答

2

該計劃不啓動,或者如果捆綁包沒有包含特定的額外資源,則立即結束活動。

驗證額外的onCreate(),如果額外缺失/無效,請致電finish()

我也想通知調用者一個錯誤聲明這樣的。

您可以將某些內容記錄到LogCat。但是,您無權將異常拋入名爲startActivity()的代碼。

你可能會考慮上,要麼活動產生某種形式的static輔助方法:

  • 只不過是組裝的,你想要的方式Intent,或

  • 還繼續運行並調用startActivity(),給予適當的Context

,並鼓勵你的開發板的(使用該方法賄賂他們,用高爾夫球杆威脅他們等)。例如,在MyActivity,具有:

public static void start(Context ctxt, YourEnum value) { 
    Intent i=new Intent(ctxt, MyActivity.this).putExtra(EXTRA_THINGY, value); 

    ctxt.startActivity(i); 
} 

和您的團隊成員可以撥打MyActivity.start(this, MyEnum.AWESOME);,開始您的活動。儘管(例如,如果他們自己創建了Intent,則不能強制編譯時錯誤),但他們不能以編程方式執行此操作。

注意,高爾夫球杆就是一個例子,而不是例如最佳實踐—,根據您的烘焙技能,你可以賄賂與cookies

+0

你是否建議我的活動應該如下所示: public static Intent IntentFactory(Context context,Mode mode){Intent intent = new Intent(); intent.setClass(context,MyNewActivity.class); intent.putExtra(Mode.class.getName(),mode.name()); return intent; } – erik

+0

@erik:抱歉,您的評論已被grue吃掉。我建議像'YourActivity。start()',其中'YourActivity'是你的活動,'start()'需要一個'Context'(用於啓動活動),你的'enum'和其他任何可以打包成extras的東西。對於一組非常複雜的演員,您可以創建一個完整的「IntentBuilder」 - 我通過CWAC-Cam2庫獲取該路線,以便組裝一個合適的「Intent」。 – CommonsWare

+0

你能嘲笑我真的很快,以確保我的理解,這個助手在myactivity和「他們的活動」的例子稱它嗎? – erik