Android 在特殊情况下如何处理dialog.Disclose?

Android 在特殊情况下如何处理dialog.Disclose?,android,android-activity,dialog,Android,Android Activity,Dialog,这是我的问题 我的应用程序中有一个主菜单,该菜单启动名为farm1的活动。 启动此farm1时,会显示一个对话框,它解释如何在当前活动(farm1)到第二个活动之间导航,第二个活动实际上是我的farm1活动的第二部分(称为farm2) 我在用刷卡和刷卡 StartActivity(farm1); finish(); 及 如您所见,当我从farm2导航到farm1时,我会启动此活动,因此,我的对话框再次显示 我不希望发生这种情况,我只希望在主菜单活动调用farm1活动时出现对话框 考虑到我的对话

这是我的问题

我的应用程序中有一个主菜单,该菜单启动名为farm1的活动。 启动此farm1时,会显示一个对话框,它解释如何在当前活动(farm1)到第二个活动之间导航,第二个活动实际上是我的farm1活动的第二部分(称为farm2)

我在用刷卡和刷卡

StartActivity(farm1);
finish();

如您所见,当我从farm2导航到farm1时,我会启动此活动,因此,我的对话框再次显示

我不希望发生这种情况,我只希望在主菜单活动调用farm1活动时出现对话框

考虑到我的对话框是在onCreate中创建的,以下是我的问题:

  • 我可以在farm1和Farm2活动之间导航而不必再次启动它们,这样我的对话框就不会再次显示
  • 我能否仅在从主菜单活动启动farm1时显示此对话框

启动活动farm1时,使用额外参数创建一个:

//Put this where you return to Farm1:
Intent intent = new Intent(Farm2.this, Farm1.class);
intent.putExtra("ignoredialog", true);
startActivity(intent);

//And this in the onCreate() of Farm1:
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if( extras != null && extras.containsKey("ignoredialog") && 
    extras.getBoolean("ignoredialog") ){
    //Do not show dialog
}else{
    //Show dialog
}

但是,更好的解决方案是在打开Farm2时不调用
finish()
,这将使Farm1在后台可用,并在关闭Farm2时从当前状态恢复。这通常是活动的预期行为。

您可以使用意图发送标志,从中启动farm1活动,如下所示:

Intent intent = new Intent(mainmenu.this, farm1.class);
intent.putExtra("flag_from", "mainmenu");
startActivity(intent);
第1步:当您启动farm1活动时,从主菜单活动发送带有标志的意向,如下所示:

Intent intent = new Intent(mainmenu.this, farm1.class);
intent.putExtra("flag_from", "mainmenu");
startActivity(intent);
步骤2:在farm1 Activity onCreate方法中接收意图,如下所示:

public class farm1 extends Activity {
    String flag="";
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // Recive Intent here
            Bundle extras = getIntent().getExtras();
            if(extras !=null)
              flag  = extras.getString("flag_from");
            else
              flag="";
        }
        @Override
        protected void onResume() {
            super.onResume();
            // Check here flag before showing Alert dialog
             if(flag=="mainmenu"){
                  // show alert here
               }
              else{
                // do some code here
              }
        }

您也可以使用

来完成此操作。请包含一些代码,这样会更容易提供帮助。请发布您的代码摘录。另外,你能把这个问题概括成一个更一般的问题吗?也许:“如何只显示一次对话框?”请尝试描述更多细节,尤其是在相关代码中。谢谢大家!如果与flag方法完美配合!下次我还会发帖代码行问@user1876708很高兴能为您提供帮助!如果答案解决了您的问题,请将其标记为已接受(单击左侧的复选标记)以关闭问题。