Почему я не могу вызвать метод родительской активности из фрагмента? - PullRequest
2 голосов
/ 28 марта 2012

У меня есть фрагмент, где я хочу вызвать метод из 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 Ответ

16 голосов
/ 28 марта 2012

getActivity() возвращает только экземпляр Activity.Это может быть любое действие, встраивающее ваш фрагмент.SetLastFragment() - это метод вашей конкретной деятельности, названный FragmentTabs.Не у всех действий есть этот метод.

Это означает, что вы должны привести его к определенному классу активности.Если вы используете свой фрагмент в нескольких активностях, вам также следует проверить, используется ли правильная активность, например, с помощью оператора instanceof:

Activity a = getActivity();

if(a instanceof FragmentTabs) {
    ((FragmentTabs) a).SetLastFragment(f2);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...