2
我有一個片段,我希望從FragmentActivity中調用包含此片段的方法。我在FragmentTabs中定義了一個方法(擴展FragmentActivity),該方法設置片段中特定事件的lastTab片段。 由於某種原因getActivity()。SomeUserDefinedActivity()無法解析。爲什麼我無法從片段調用父級活動的方法?
下面是代碼解釋我的問題:
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
testButton = (Button)getView().findViewById(R.id.button1);
testButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Log.i("FragmentTest", "Button1 Clicked");
TestFragment2 f2 = new TestFragment2();
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace(R.id.realtabcontent, f2);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
// This is where I want to call FragmentTabs method SetLastFragment, but I cannot access it.
getActivity().SetLastFragment(f2);
}
});
}
這是我希望在FragmentTabs調用的方法:
public void SetLastFragment(Fragment f)
{
mTabManager.SetLastTabFragment(f);
}
而且一般:*「不起作用」 *是不是一個很具體的問題說明。請發佈您獲得的錯誤消息,在這種情況下可能是「方法X對於Y類未定義」或類似的消息。在這裏我有一個想法是什麼,但事實並非總是如此。沒有信息就很難找到一些東西。 – 2012-03-28 10:12:20
@litemode:更好的是不要在活動中調用方法。如果您使用的是片段,您的片段很可能會被多個活動託管(例如,一個用於較小的屏幕,另一個用於較大的屏幕)。最大的靈活性是使用提供給片段的偵聽器接口。第二大靈活性是說活動實現了一個接口並將'getActivity()'強制轉換爲該接口。 – CommonsWare 2012-03-28 11:27:17
我同意CommonsWare您應該使用接口來處理事件。但是,如果您有嵌套的片段,則直接調用上面的答案這樣的活動方法非常有用,其中一個活動添加一個片段,然後添加另一個片段,等等。它更容易以這種方式訪問活動的方法,而不是在每個片段中實現接口以便能夠訪問活動。 – 2012-11-10 12:15:27