Как из одного фрагмента подключить в контейнер другого фрагмена третий фрагмент?

Есть FragmentActivity, к которому прицеплено несколько Fragment через TabsPagerAdapter. В первом фрагменте создал контейнер, чтобы при включении CheckBox на втором фрагменте, в него выводился дополнительный фрагмент. Обработку события OnCheckedChangeListener() произвожу в том же фрагменте где и сам CheckBox. При попытке нажать на CheckBox вываливается ошибка: he specified child already has a parent. You must call removeView() on the child's parent first.

MainActivity:
public class MainActivity extends FragmentActivity implements ActionBar.TabListener {



	private ViewPager viewPager;
	private TabsPagerAdapter mAdapter;
	private ActionBar actionBar;
    // Tab titles
	private String[] tabs = { "Расчет КВ", "Регулярность движения", "Логи", "Настройки" };

      @Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// Initilization
		viewPager = (ViewPager) findViewById(R.id.pager);
		actionBar = getActionBar();
		mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
        viewPager.setOffscreenPageLimit(3);
		viewPager.setAdapter(mAdapter);
		actionBar.setHomeButtonEnabled(false);
		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);		

		// Adding Tabs
		for (String tab_name : tabs) {
			actionBar.addTab(actionBar.newTab().setText(tab_name)
					.setTabListener(this));
		}

		viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

			@Override
			public void onPageSelected(int position) {
				// on changing the page
				// make respected tab selected
				actionBar.setSelectedNavigationItem(position);
			}

		});
	}

	@Override
	public void onTabSelected(Tab tab, FragmentTransaction ft) {
		// on tab selected
		// show respected fragment view
		viewPager.setCurrentItem(tab.getPosition());
	}
}


Fragment1_layout
<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativeLayout">
<LinearLayout
                android:orientation="vertical"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                <b>android:id="@+id/container"</b>
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true">

            </LinearLayout>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:text="@string/RealTime"
                android:id="@+id/KVRealTime_tv"
                android:textSize="60dp"
                android:textStyle="bold"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true" />
</RelativeLayout>


Fragment2
public class Options extends Fragment implements CompoundButton.OnCheckedChangeListener {

    CheckBox EmuEnable;
    private FragmentManager manager;
    private FragmentTransaction transaction;
    private FakeSpeed fakespeed;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        manager = getActivity().getFragmentManager();
        fakespeed = new FakeSpeed();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_options, container, false);

        EmuEnable = (CheckBox) v.findViewById(R.id.EmuEnable);
        EmuEnable.setOnCheckedChangeListener(this);
        //EmuEnable.setOnCheckedChangeListener(this);

        return v;
    }


    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        transaction = manager.beginTransaction();
        if (EmuEnable.isChecked()){
            transaction.add(R.id.container, fakespeed);

        }
        transaction.commit();
    }
}


Ну и код третьего фрагмента, который пытаюсь динамически прицепить к первому: (Код layuot файла прикладывать не буду, там просто несколько кнопок)
public class FakeSpeed extends Fragment {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {

        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_fake_speed, container, true);
        return v;
    }
  • Вопрос задан
  • 2404 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Afdenis Автор вопроса
Разобрался в чем была проблема. MainActivity было подключено не через Support библиотеку. Поменял, теперь все работает как надо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы