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