2014-04-12 49 views
1

我在我的一些片段中使用我主要活動的對象,其中一個是在我的MainActivity中定義並用於所有片段的SpeechHelper。從Fragment裏面的FragmentActivity訪問對象?

我知道兩種方法在我的片段來使用這個對象:

-The第一個是把它傳遞給片段在它的構造。

-The二是要做到這一點:

((MainActivity) getActivity()).speechHelper.speak(getString(R.string.flashlight),TextToSpeech.QUEUE_FLUSH); 

我不知道這種方法是如何工作的,morover它早在MainActivity生命週期崩潰我的應用程序。

我想知道有什麼方法可以做到這一點,什麼是從我的碎片中的MainActivity(FragmentActivity)訪問對象的首選方法。

回答

0

第一種是首選的方法。同樣可以接受的是,如果有必要的話,可以通過調用後的構造函數傳入。上面使用的方法僅在speechHelper是公共的時候才起作用,或者如果它受到保護並且片段位於同一個包中。直接訪問變量通常是一個糟糕的主意,因爲它違反了關注點的分離,並且如果重構可能會導致各種次要問題。

0

很多我曾經使用過的地方都有主要的活動實現一個監聽器接口。您將綁定到片段的附件中,並在您的活動中使用該公共方法來使用該偵聽器實例運行代碼inmain activity。

相關問題