Как я могу использовать экземпляр фрагмента Android в разных фрагментах? - PullRequest
5 голосов
/ 13 марта 2012

Вот мой пример использования:

Мне нужно создать 3 вкладки, используя Навигационные вкладки ActionBar , и я использую ActionBarSherlock для этого. Каждая из 3 вкладок имеет свой собственный Фрагмент . Однако есть некоторая общая информация, которая отображается на каждой из вкладок (в моем случае, название продукта, описание). Я создал еще один фрагмент для этой общей информации и ссылаюсь на этот фрагмент в каждом из основных макетов фрагмента, например this .

Вот моя проблема:

Я хочу повторно использовать экземпляр Fragment, который извлекает и отображает общую информацию. Я использую приведенный ниже код, но всегда создается новый экземпляр общего фрагмента в каждом из основных фрагментов.

    FragmentManager fm = getFragmentManager();
    f = (ProductDetailsInfoFragment) fm.findFragmentByTag("prodinfo");

    if (f == null) {
        Log.d(TAG, "fragment not found...creating new instance");

        f = new ProductDetailsInfoFragment();
        f.setTargetFragment(this, 0);
        fm.beginTransaction().replace(R.id.prod_info_fragment, f, "prodinfo").commit();         
    }

1 Ответ

2 голосов
/ 18 апреля 2013

Вы можете поделиться фрагментами, если хотите.Вам нужно будет реализовать ActionBar.TabListener и в вашем onTabSelected просто выбрать, какой фрагмент вы хотите использовать.

Вы можете сделать что-то вроде этого: https://gist.github.com/anonymous/5415274

A лучше - это сохранить данные, необходимые для обоих этих фрагментов, в отдельный объект, который выможет поделиться между ними.Это позволит вам протестировать поиск, не подключая к нему пользовательский интерфейс, если хотите.Это также позволяет двум фрагментам расходиться по мере необходимости, делая их единой целью, а не хранить весь код, необходимый для обоих действий, в одном фрагменте.

...