2015-02-24 100 views
0

我正在開發一個基本上由自定義視圖組成的Android模塊。第三方可以放入任何他們的活動中。 該模塊包含一個配置活動(基於PreferenceActivity)。Android意圖活動回調

鑑於您無法從View開始活動,模塊會在其顯示的活動中調用'openConfig(意圖意向)'。此活動充當模塊的代理。

到目前爲止工作正常(雖然我真的很喜歡模塊內部處理所有內容,不需要委託方法,但我認爲這是不可能的)。 但是,我需要從首選項活動到模塊的某種回調,以便在更改設置時通知模塊。

我正在考慮將模塊的主類添加爲首選項活動的代理;

ConfigActivity a = new ConfigActivity(); 
a.testVar = "testtest"; 
Intent intent = new Intent(getContext(), a.getClass()); 
delegate.handleConfigAction(intent); // 

然而,這個測試只是一個簡單的字符串(而不是接口)顯示,該活動開始後的字符串將不會置。

第二個想法是在意圖上使用'putExtra()',但這並不適合用例,因爲我真的想要放在那裏的委託是一個View而不是一個可序列化的數據對象。

有沒有什麼方法可以讓我在內部處理?我知道'onActivityResult()'函數(http://developer.android.com/training/basics/intents/result.html),但這意味着使用我的模塊的第三方開發人員需要處理此問題,這是由於顯而易見的原因需要避免的。

任何幫助將不勝感激!

編輯:最終的解決方案 最後,我已經改變了模塊從視野中的片段,該功能現在與處理「子」活動,這樣更好。當從一個片段開始一個活動時,'onActivityResult'函數可以很好地完成當前的任務。

+1

「以便模塊在設置被更改時得到通知」 - 爲什麼不使用[OnSharedPreferenceChangeListener](http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener。 HTML)? – CommonsWare 2015-02-24 14:47:39

+0

那麼我將如何註冊該聽衆呢?我的意思是,PreferencesActivity將從一個視圖開始,而不是一個活動。 – AlBirdie 2015-02-25 09:33:14

+1

觀點發起活動是一個關注點分離設計缺陷,恕我直言。這就是說,在啓動PreferenceActivity之前,沒有什麼能阻止'View'訪問'SharedPreferences'並調用'setOnSharedPreferenceChangeListener()'。 – CommonsWare 2015-02-25 12:15:47

回答

1

可以使用開始從ViewActivityContext爲:

@Override 
public void onClick() { 
    Intent intent = new Intent(getContext(), ConfigActivity.class); 
    intent.putExtra("testVar", "testtest"); 
    getContext().startActivity(intent); 
} 

你可以使用onWindowVisibilityChanged()方法來讀取,將在ConfigActivity設置,使您的View改變其行爲的配置。

+0

在視圖中使用getContext()可以很好地啓動新的活動。感謝那。但是,我不能使用putExtra,因爲我需要將視圖實現傳遞給它。 – AlBirdie 2015-02-25 09:34:53

+0

爲什麼你需要通過'View'本身? – Gorcyn 2015-02-25 09:45:03

+0

那麼,我想要回調視圖。還有其他方法可以實現嗎? – AlBirdie 2015-02-25 10:21:38