Как включить фрагменты внутри вкладки?Переключить фрагменты внутри вкладки
Мое приложение содержит три фрагмента, фрагмент, BFragment и CFragment. Эти фрагменты, в свою очередь, соответствуют их собственным файлам макетов: AFragment содержит кнопку, а BFragment и CFragment имеют TextView. Существует четвертый файл макета с именем activity_main.
Теперь у меня есть четыре класса: MainActivity, AFragment, BFragment и CFragment. Классы AFragment, BFragment, CFragment только типичные содержат OnCreateView для каждого из них.
MainActivity содержит следующее:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
appContext = getApplicationContext();
//ActionBar
ActionBar actionbar = getActionBar();
actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab PlayerTab = actionbar.newTab().setText("Fragment A");
ActionBar.Tab StationsTab = actionbar.newTab().setText("Fragment B");
Fragment PlayerFragment = new AFragment();
Fragment StationsFragment = new BFragment();
PlayerTab.setTabListener(new MyTabsListener(PlayerFragment));
StationsTab.setTabListener(new MyTabsListener(StationsFragment));
actionbar.addTab(PlayerTab);
actionbar.addTab(StationsTab);
И тогда TabListener:
class MyTabsListener implements ActionBar.TabListener {
public Fragment fragment;
public MyTabsListener(Fragment fragment) {
this.fragment = fragment;
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
Toast.makeText(MainActivity.appContext, "Reselected!", Toast.LENGTH_LONG).show();
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.replace(R.id.fragment_container, fragment);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(fragment);
}
}
Как вы можете видеть, activity_main.xml содержит только LinearLayout с идентификатором '' fragment_container для вкладок AFragment и BFragment. Теперь я хочу, чтобы это было так, что нажатие кнопки в AFragment переключает весь AFragment на CFragment. Как я могу это достичь? Спасибо.
(EDIT) Я сделал следующее, но мое приложение разбилось на старте. Что я сделал не так?
Я добавил следующее в моем MainActivity.java, чуть ниже последовательности ActionBar:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
appContext = getApplicationContext();
//ActionBar
....
....
....
Button mButton = (Button) findViewById(R.id.button1);
mButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
CFragment fragment = new CFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
}
});
Не связанные, но уважающие соглашения о кодировке java. Переменные начинаются с строчной буквы. Ваш код будет легче читать. – Snicolas
спасибо, сделаю. Сожалею. – Mnemone