我想從片段屏幕中調用活動中的方法。從片段內部調用活動方法
我有一個稱爲myMethod()的方法,它在一個名爲MyActivity的活動中; 我有一個叫做Screen1Fragment的片段。
我想從Screen1Fragment中調用MyActivity.myMethod(),但我不知道如何做到這一點。
此前Screen1Fragment是一項活動,所以我擴展MyActivity以便我可以直接調用 myMethod()。 但我不得不將活動更改爲滑動標籤使用情況的片段。
在此先感謝。
我想從片段屏幕中調用活動中的方法。從片段內部調用活動方法
我有一個稱爲myMethod()的方法,它在一個名爲MyActivity的活動中; 我有一個叫做Screen1Fragment的片段。
我想從Screen1Fragment中調用MyActivity.myMethod(),但我不知道如何做到這一點。
此前Screen1Fragment是一項活動,所以我擴展MyActivity以便我可以直接調用 myMethod()。 但我不得不將活動更改爲滑動標籤使用情況的片段。
在此先感謝。
在片段中使用getActivity()
。
MyActivity activity = (MyActivity) getActivity();
activity.myMethod();
,如果你不知道你的片段連接到MyActivity然後
Activity activity = getActivity();
if(activity instanceof MyActivity){
MyActivity myactivity = (MyActivity) activity;
myactivity.myMethod();
}
嗨, 第一種方式給我一個錯誤,無法從FragmentActivity強制轉換爲MyActivity。 第二種方式不會給我一個錯誤,但它不會加載按鈕單擊方法。點擊時,我只是將代碼放入按鈕中。 –
然後你應該從FragmentActivity而不是Activity擴展你的Activity。 (公共類MyActivity擴展FragmentActivity {...) – Sipka
嗨,第一種方式工作很好,但由於某種原因,我的應用程序現在崩潰時,我嘗試使用它。 –
如果方法是MainActivity的靜態方法,像:
public static void someMethod(){}
然後,非常簡單。請致電
MainActivity.someMethod()
但是,我想你真正想要的是從Activity類訪問某個函數。然後,您可以在碎片視圖中使用以下代碼
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
container.getContext().someMethod();
}
IMO這是不好的做法。 1.容器可能爲空,並且getContext()返回Context,您仍然需要檢查MyActivity實例。 2。您不想通過靜態方法與Activity進行通信,因爲那樣就不可能擁有該Activity的兩個實例。 – Sipka
好點。但我想在這種情況下可以。似乎問題的擁有者想要在活動中使用一些滑動選項卡。我們非常確定活動在那裏。無論如何,我並不建議使用靜態方法。我猜猜什麼是真正的問題。 –
您應該使您的碎片完全獨立於您附加的活動。碎片的要點是,您可以在不同的環境中將它們重用於不同的活動。爲了實現這一點,仍然可以從您的Activity中調用official documentation中建議的以下模式。
在您的片段:
定義一個公共接口與方法
public interface MyFragmentCallback{
public void theMethod();
}
定義一個字段,並得到鑄造參考:
private MyFragmentCallback callback;
public void onAttach(Activity activity){
callback = (MyFragmentCallback) activity
super.onAttach(activity);
}
您的活動
MyFragmentCallback
。theMethod()
在您的活動(Eclipse會問你這樣做)然後,從你的片段,你可以叫callBack.theMethod()
這之間的區別只是要求你對getActivity方法()是你的片段不再與這個特定的活動配對。因此,您可以將其重新用於其他活動,例如手機和平板電腦。
這是正確的方法!每谷歌文檔! – sandalone
'((YourActivityClass)getActivity).myMethod();' –
http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity – jpm
嗨,當我嘗試這個時我得到一個錯誤說不能施放從FragmentActivity到MyActivity。 MyActivity是否需要爲我擴展FragmentActivity才能使用此代碼。 –