FragmentTabHost & Fragments – Как передать данные между вкладками?

У меня есть MainActivity (FragmentActivity), у которого есть FragmentTabHost.

public class FragmentTabs extends FragmentActivity { private FragmentTabHost mTabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_tabs); mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost); mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); mTabHost.addTab(mTabHost.newTabSpec("classA").setIndicator("Class A"), ClassA.class, null); mTabHost.addTab(mTabHost.newTabSpec("classB").setIndicator("Class B"), ClassB.class, null); mTabHost.addTab(mTabHost.newTabSpec("classC").setIndicator("Class C"), ClassC.class, null); } } 

ClassA, ClassB и ClassC – это все фрагменты (android.support.v4.app.Fragment).

Мне нужно передать данные (и методы вызова) на фрагменты. Как я могу получить ссылку на каждый из фрагментов, например:

 ClassA mClassAFragment = ???; 

Я попытался использовать getSupportFragmentManager (). FindFragmentByTag (), и я также попытался изучить возможности mTabHost. Ничто не может их получить.

Можете ли вы предложить способ сделать это или предложить альтернативный подход?

Здесь. Чтобы решить эту проблему, я перегрузил метод onAttachFragment в своем FragmentActivity:

 public class FragmentTabs extends FragmentActivity { private FragmentTabHost mTabHost; @Override protected void onCreate(Bundle savedInstanceState) { ... } @Override public void onAttachFragment(Fragment fragment) { super.onAttachFragment(fragment); if (fragment.getClass() == ClassA.class) { ClassA mClassAFragment = (ClassA)fragment ... } } } 

Вы можете получить свой фрагмент следующим образом:

 YourFragment frag = (YourFragment) getSupportFragmentManager() .findFragmentById(R.id.fragmentid)); 

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

 Bundle arguments = new Bundle(); arguments.putString("some id string", "your data"); YourFragment fragment = new YourFragment(); fragment.setArguments(arguments); getSupportFragmentManager().beginTransaction().add(R.id.fragmentid, fragment).commit(); 

Это может быть достигнуто с помощью 3-го аргумента android.support.v4.app.FragmentTabHost.addTab (TabSpec, Class, Bundle args ) , тогда аргументы могут быть получены через android.support.v4.app.Fragment.getArguments ()

 public class Tab1Fragment extends BaseFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // do something with the arguments Log.i("DEBUG", "" + getArguments()); // ... } 

}

Intereting Posts
Создание приложения NDK с Android ADT в Windows Случайная строка из списка массивов строк Недействительный 1 пользовательский вид вызывает все пользовательские представления в группе просмотра, которая будет признана недействительной? Как удалить простыню вокруг кнопок в Android? «Вы не можете установить это приложение, потому что другой пользователь уже установил несовместимую версию на этом устройстве» Прослушивание состояния WIFI Как избежать показа моего приложения в списке недавно использованных приложений Что такое идеальный подход для обучения Android Development для разработчика C #? При прослушивании LocationManager.GPS_PROVIDER не запускается никаких событий LocationListener Включение ProGuard в Eclipse для Android Переключить в Android-навигатор Показать разрешение для объяснения асинхронно Получение Transform Exception при создании проекта Набор изображений в качестве фона кнопки переключения растягивается андроид Ошибка AppCompat v7 r21 в значениях.xml?