片段中的onBackPressed显示活动两次

时间:2017-07-19 06:10:28

标签: java android android-intent onbackpressed dialogfragment

我有一个应用程序min SDK 21,目标25.使用:android.app.DialogFragmentandroid.support.v7.app.AppCompatActivity.

初始Activity是一个启动器,它可以启动3个活动中的1个和DialogFragmentDialogFragment可以依次启动Activity(这是3个活动之一)。我遇到的问题只是关于正在加载的DialogFragment和Fragment然后加载一个Application然后返回到Launcher。

Fragment立即返回启动器(不加载Activity)时,这可以正常工作。我可以检测到Fragment是通过启动器加载的,onBackPress()可以处理它。

但是,当Fragment加载另一个Activity然后onBackPress()用于返回Fragment,然后onBackPress()用于返回启动器,我有一个问题。目前处理此情况的方式是Fragment使用标记IntentFLAG_ACTIVITY_CLEAR_TASK以及FLAG_ACTIVITY_NEW_TASK通过FLAG_ACTIVITY_CLEAR_TOP加载启动器(这似乎是某人类似问题的解决方案)。我已尝试过这些标志的其他变体,也没有这些标志。我还试图在onBackPress()中使用这种情况DialogFragment而不使用Intent加载Activity,并且应用程序终止,我需要它返回启动器。

在这种情况下,使用这些标志,当我返回Launcher时,Launcher会显示然后清除然后重新显示(在另一个onBackPress()上,然后应用程序正确终止)。问题是Launcher显示两次。我假设首先显示的启动器是加载的原始副本,然后它被新副本替换。我还没有找到一种方法(在这种情况下)加载Launcher的原始副本(如果这实际上是发生了什么)。如上所述,这是DialogFragment

如何解决这个问题,以便在这种情况下Launcher Activity不显示两次?

3 个答案:

答案 0 :(得分:0)

为什么你不完成片段中的活动才能返回启动器活动?

如果你真的需要使用意图,请尝试Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

答案 1 :(得分:0)

尝试覆盖library(shiny) library(shinyjs) ui <- fluidPage( useShinyjs(), actionButton("test", label = "test"), shinyjs::hidden(wellPanel(id = "panelA", "I AM PANEL A")), wellPanel(id="panelB", "I AM PANEL B") ) server <- function(input,output){ observeEvent(input$test, { shinyjs::toggle(id= "panelA") shinyjs::toggle(id= "panelB") }) } shinyApp(ui=ui,server=server) 方法,如下所示:

   public static void main(String[] args)
   {
    String[] words = { "Mary", "had", "a", "little", "lamb",
                     "it's", "fleece", "was", "white", "as",
                     "snow" };

   Scanner in = new Scanner(System.in);
  System.out.print("Word length: ");
  int wordLength = in.nextInt();

  boolean found = false;
  int pos = 0; 
  while (!found)
  {
     if (wordLength == words[pos].length())
     {
        pos++;
     }
     else
     {
        found = true;
     }
  }

  if (pos > 0)
  {
     System.out.println("Found " + words[pos] + " at position " + pos);
  }
  else
  {
     System.out.println("No word of length " + wordLength);
  }
}

答案 2 :(得分:0)

auth_admin

if (getSupportFragmentManager().getBackStackEntryCount() > 0) { getSupportFragmentManager().popBackStackImmediate(); } else { super.onBackPressed(); } 方法中使用它。