我有一个片段,我想从包含这个片段的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);
}
答案 0 :(得分:16)
getActivity()
只返回一个Activity实例。这可以是嵌入片段的任何活动。 SetLastFragment()
是您的一项特定活动的方法,名为FragmentTabs
。并非所有活动都有这种方法。
这意味着您必须将其强制转换为特定的活动类。如果您在多个活动中使用您的片段,您还应该检查是否使用了正确的活动,例如通过instanceof
运营商:
Activity a = getActivity();
if(a instanceof FragmentTabs) {
((FragmentTabs) a).SetLastFragment(f2);
}