Android关闭所有片段onBackPressed

时间:2017-01-09 13:25:58

标签: android android-fragments

我有一个活动,每个片段中有大约10个片段,有一个带有ProgressDialog的AsyncTask,当我点击Back Button时我需要关闭所有片段 它已关闭,但ProgressDialog仍然可见,特别是当我在片段之间传输时 这是我使用的代码

 @Override
    public void onBackPressed() {
      if(fragmentManager!=null){
            for(int i = 0; i < fragmentManager.getBackStackEntryCount(); ++i) {
                fragmentManager.popBackStack();
            }}
                                 }

当我调试时,我发现当我按下后退按钮时,我打开的每个片段都会进入onCreateView,尽管我使用transaction.replace方法在片段之间进行传输。

1 个答案:

答案 0 :(得分:5)

我正在通过以下方法清理堆栈。

    // popupdialog.cpp

    #include "popupdialog.h"
    #include "ui_popupdialog.h"


    PopupDialog::PopupDialog(QWidget *parent, QString msgTxt) :
            QDialog(parent),
            ui(new Ui::PopupDialog),
            messageText(msgTxt)
    {
            ui->setupUi(this);
            setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
            setModal(true);
            ui->message_text_display->setText(messageText);
            // The message_text_display is an instance of the class,
            // "PlainTextEdit". Using "QLabel" partly solves my
            // problem, but does not allow text selection.
    }

    PopupDialog::~PopupDialog()
    {
            delete ui;
    }


    void PopupDialog::mouseReleaseEvent(QMouseEvent *e)
    {
            this->close();
    }

清除1表示将从堆栈中删除所有片段,并且只有单个片段将保留在堆栈中。

用法          popBackStackTillEntry(1);