我有一个简单的DialogFragment,当退出时会调用dismiss方法,根据文档:
public void dismiss()
关闭此片段及其对话框。如果片段已添加到 回退堆栈,则将弹出所有回退堆栈状态,直到包括此条目为止。 否则,将提交新事务以删除该片段。
然而,我发现在调用dismiss()后,该片段仍然在后退堆栈中,因此我必须点击返回按钮来清除它。 有人知道为什么吗?
这是我的代码:
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.test_layout);
class MyDialogFragment extends DialogFragment implements OnClickListener{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.hello_world, container, false);
Button b = (Button)v.findViewById(R.id.btn);
b.setOnClickListener(this);
return v;
}
@Override
public void onClick(View v) {
dismiss();
}
}
getFragmentManager().beginTransaction().add(android.R.id.content, new MyDialogFragment(), "test").addToBackStack("b").commit();
}
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0 ){
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
}
我还发现,如果我不覆盖 onBackPressed() 方法,无论我在活动中添加了多少个片段,返回按钮始终会立即退出活动,根本没有作用。
android.app.DialogFragment
还是android.support.v4.app.DialogFragment
?你找到了解决这个问题的方法吗? - Ibrahim Disouki