Как добавить / удалить фрагмент при нажатии кнопки?
в настоящее время у меня есть контейнер" RELATIVE_LAYOUT", который я использую для добавления моего фрагмента. Я использую OnClickListener на кнопке, чтобы загрузить макет фрагмента XML в контейнер RelativeLayout.
чего я хочу достичь, так это того, что когда я нажимаю кнопку один раз, фрагмент должен загружаться...и когда я нажимаю на нее снова, фрагмент должен быть удален. Я уже пытался использовать integer, чтобы определить, загружен ли фрагмент, но не удалось. Любая помощь Оцененный...
код:
public class MainActivity extends Activity {
Button B1,B2;
int boolb1=0, boolb2=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
B1 = (Button)findViewById(R.id.btn1);
B2 = (Button)findViewById(R.id.btn2);
B1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
FragmentOne f1 = new FragmentOne();
if(boolb1==0)
{ft.add(R.id.frg1, f1);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
boolb1=1;}
else
{ft.remove(f1);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
boolb1=0;}
//ft.addToBackStack("f1");
ft.commit();
}
});
B2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
FragmentTwo f2 = new FragmentTwo();
if(boolb2==0) {
ft.add(R.id.frg2, f2);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
boolb2=1;
} else {
ft.remove(f2);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
boolb2=0;
}
//ft.addToBackStack("f2");
ft.commit();
}
});
}
1 ответов
ваша проблема в том, что вы создать новый Fragment
каждый раз, когда вы нажимаете Button
. Вам нужно получить ссылку на текущий добавлен Fragment
а затем удалите этот.
кроме того, вам больше не нужно использовать флаг.
При добавлении Fragment
вы можете tag его. После удаления Fragment
, вы можете использовать тег используется для добавления Fragment
чтобы получить ссылку на текущий добавленный Fragment
.
здесь пример того, как вы должны это сделать:
private Button B1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
B1 = (Button)findViewById(R.id.btn1);
B1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
FragmentOne f = (FragmentOne) fm.findFragmentByTag("tag");
if(f == null) { // not added
f = new FragmentOne();
ft.add(R.id.frg1, f, "tag");
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
} else { // already added
ft.remove(f);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
}
ft.commit();
}
});
// and so on ...
}