我今天只是在学习片段。我按下一个按钮,它添加/删除了一个片段。但是,如果我尝试删除该片段,那么除了要删除的片段之外,每个片段都会被删除,为什么?第一次按正确添加一个片段。
Button2 fragment: Button button = (Button) view.findViewById(R.id.button2); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ButtonFragment fragment = new ButtonFragment(); if (fragment != null && fragment.isVisible()) { FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.remove(fragment).commit(); } else if(!fragment.isVisible()) { FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.add(R.id.fragment_container, fragment ).commit(); } } }); return view; } }
我在xml中有两个这样的片段:当我单击按钮时,我希望添加未在xml中定义的片段,而确实是。但是,下次我按下按钮时,应该删除该片段。除该片段外,所有内容均被删除。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:background="#123456" android:id="@+id/fragment_container" > <fragment android:id="@+id/TimeFragment" android:layout_width="0dp" android:layout_weight="2" android:layout_height="match_parent" class="com.example.myfragment.TimeFragment" > <!-- Preview: layout=@layout/details --> </fragment> <fragment android:id="@+id/Button2Fragment" android:layout_width="0dp" android:layout_weight="3" android:layout_height="match_parent" class="com.example.myfragment.Button2Fragment" > <!-- Preview: layout=@layout/details --> </fragment> </LinearLayout>
您无法删除Framgnet使用XML添加的。如果要通过该.remove方法删除该片段,则应首先通过该方法将其添加到布局中.add,而不是将其嵌入到XML文件中。在这种情况下,你只能.show或.hide将Fragments。
Framgnet
.remove
.add
.show
.hide
Fragments
更新:
要ButtonFragment动态添加,请执行以下操作:
ButtonFragment
ButtonFragment buttonsFragment = new ButtonFragment(); newfragmentTransaction = fragmentManager.beginTransaction(); newfragmentTransaction.add(R.id.containerForFragments, buttonsFragment ).commit();
更新2: 此代码:
Button button = (Button) view.findViewById(R.id.button2); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ButtonFragment fragment = new ButtonFragment(); if (fragment != null && fragment.isVisible()) { FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.remove(fragmentManager.findFragmentById(R.layout.activity_main)).commit(); } else if(!fragment.isVisible()) { FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.add(R.layout.activity_main, fragment ).commit(); } } });
应该Activity从而不是从运行Fragment。
Activity
Fragment