为什么我不能从片段中调用父活动的方法?

时间:2012-03-28 10:01:05

标签: android android-fragments

我有一个片段,我想从包含这个片段的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);
}

1 个答案:

答案 0 :(得分:16)

getActivity()只返回一个Activity实例。这可以是嵌入片段的任何活动。 SetLastFragment()是您的一项特定活动的方法,名为FragmentTabs。并非所有活动都有这种方法。

这意味着您必须将其强制转换为特定的活动类。如果您在多个活动中使用您的片段,您还应该检查是否使用了正确的活动,例如通过instanceof运营商:

Activity a = getActivity();

if(a instanceof FragmentTabs) {
    ((FragmentTabs) a).SetLastFragment(f2);
}