我在Android Fragments Dev Guide中看到,「活動可以通過使用findFragmentById()
或findFragmentByTag()
獲取對來自FragmentManager的片段的引用來調用片段中的方法。」從父活動調用片段方法
下面的示例顯示如何獲取片段引用,但不知道如何調用片段中的特定方法。
任何人都可以舉例說明如何做到這一點?我想從父活動的Fragment中調用特定的方法。謝謝。
我在Android Fragments Dev Guide中看到,「活動可以通過使用findFragmentById()
或findFragmentByTag()
獲取對來自FragmentManager的片段的引用來調用片段中的方法。」從父活動調用片段方法
下面的示例顯示如何獲取片段引用,但不知道如何調用片段中的特定方法。
任何人都可以舉例說明如何做到這一點?我想從父活動的Fragment中調用特定的方法。謝謝。
不了的問題,正是因爲它太簡單了:如果您使用的是支持庫
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.<specific_function_name>();
,你會想要做這樣的事情:
FragmentManager manager = getSupportFragmentManager();
Fragment fragment = manager.findFragmentById(R.id.my_fragment);
fragment.myMethod();
如果您使用「進口android.app.Fragment;」 然後使用:
1)
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.specific_function_name();
其中R.id.example_fragment最有可能是xml佈局中的FrameLayout id。 OR
2)
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentByTag(「FragTagName」);
fragment.specific_function_name();
哪裏FragTagName是當ü沒有ü指定的名稱:
TabHost mTabHost.newTabSpec(「FragTagName」)
如果您正在使用「導入android.support.v4.app。片段;「 然後使用:
1)
ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentById(R.id.example_fragment);
fragment.specific_function_name();
OR
2)
ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentByTag(「FragTagName」);
fragment.specific_function_name();
((FragmentName) getFragmentManager().findFragmentById(R.id.fragment_id)).methodName();
2.如果您使用的是支持庫片段,然後執行以下操作:
((FragmentName) getSupportFragmentManager().findFragmentById(R.id.fragment_id)).methodName();
我認爲最好是檢查片段在片段調用方法前加入。做這樣的事情來避免null異常。
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
if(fragment.isAdded()){
fragment.<specific_function_name>();
}
好吧,這很容易,謝謝(我是碎片新品)。現在最難的部分是我似乎無法首先獲得對片段的引用。它沒有在XML佈局中定義,所以我不能使用findFragmentById()。從我遵循的代碼(參見上文)中我不清楚該片斷甚至創建的方式/位置。如果是我可以只添加一個標籤並使用findFragmentByTag()。該示例的AccountListActivity部分確實有對beginTransaction()。add()的調用,但根據我的跟蹤,它從未被調用過。這是我撓頭的地方。我很欣賞任何建議。 – gcl1
對不起,我遺漏了參考。我所遵循的代碼模式是[FragmentTabsPager](http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabsPager.html)。謝謝。 – gcl1
當你既沒有ID也沒有與片段相關的TAG時,情況將會不同。 –