Задать вопрос

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

Есть 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;
    }
  • Вопрос задан
  • 2407 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Afdenis Автор вопроса
Разобрался в чем была проблема. MainActivity было подключено не через Support библиотеку. Поменял, теперь все работает как надо.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы