我的程序中存在片段问题 - 在 getFragmentManager()。beginTransaction()。remove(selectSectionFragment).commit()方法后仍然可见。但是当我在模拟器中更改屏幕模式(例如 - 横向)时 - 片段消失了(我需要的东西)。
公共类AddCardActivity扩展了Activity {
private EditText sectionChoiceField;
private android.app.FragmentTransaction fTrans;
private SelectSectionFragment selectSectionFragment;
private String selectedSectionName;
private int selectedSectionId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_card);
TextView topTitle = (TextView)findViewById(R.id.addCardTextView);
Typeface font = Typeface.createFromAsset(getAssets(), "fonts/mainmenu_button_font.ttf");
topTitle.setTypeface(font);
sectionChoiceField = (EditText)findViewById(R.id.sectionChoice);
selectSectionFragment = new SelectSectionFragment();
sectionChoiceField.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
fTrans = getFragmentManager().beginTransaction();
fTrans.add(R.id.add_card_container, selectSectionFragment);
fTrans.setCustomAnimations(R.anim.slide_in, R.anim.slide_out);
fTrans.show(selectSectionFragment);
fTrans.commit();
}
});
}
public void setSectionToField(String name, int id) {
sectionChoiceField.setText(name);
selectedSectionName = name;
selectedSectionId = id;
getFragmentManager().beginTransaction().remove(selectSectionFragment).commit();
}
}
正如您在代码块中看到的那样 - 首先成功执行。
fTrans = getFragmentManager().beginTransaction();
fTrans.add(R.id.add_card_container, selectSectionFragment);
fTrans.setCustomAnimations(R.anim.slide_in, R.anim.slide_out);
fTrans.show(selectSectionFragment);
fTrans.commit();
但是setSectionToField方法的执行 - 不会破坏活动中的片段 - 它仍然是可见的,我可以用它进行操作。但是getBackStackEntryCount()返回0 - 所以片段是未触动的,但仍然可见。不知道如何“杀死”这个问题((
答案 0 :(得分:1)
您必须指定要删除的SelectSectionFragment,因为您已将其添加到R.id.add_card_container,请尝试:
SelectSectionFragment frag = (SelectSectionFragment)getFragmentManager.findFragmentById(R.id.add_card_container);
fTrans = getFragmentManager().beginTransaction();
fTrans.remove(frag); fTrans.commit();