【问题标题】:How to handle dialog.dismiss in particular conditions?如何在特定条件下处理 dialog.dismiss?
【发布时间】:2012-12-04 18:50:59
【问题描述】:

这是我的问题,

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

我正在使用滑动和

StartActivity(farm1);
finish();

StartActivity(farm2);
finish();

如您所见,当我从农场 2 导航到农场 1 时,我开始了这个活动,所以我的对话框再次出现!

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

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

  • 我能否在农场 1 和农场 2 活动之间导航而不必重新启动它们,这样我的对话框就不会再次出现。
  • 我能否仅在从我的主菜单活动启动 farm1 时才显示此对话框?

【问题讨论】:

  • 请包含一些代码,这样会更容易提供帮助。
  • 请发布您的代码摘录。另外,你能把它作为一个更普遍的问题吗?也许:“如何只显示一次对话框?”
  • 尝试描述更多细节,尤其是在相关代码中

标签: android android-activity dialog


【解决方案1】:

您可以使用 Intent 发送您从中启动 farm1 Activity 的标志:

第 1 步: 当您启动 farm1 Activity 时,从主菜单 Activity 发送带有标志的 Intent:

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
              }
        }

您也可以使用SharedPreferences 来做到这一点

【讨论】:

    【解决方案2】:

    当启动 Activity farm1 时,创建一个带有额外参数的 Intent

    //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 时它会从当前状态恢复。这通常是活动的预期行为。

    【讨论】:

    • 谢谢大家!如果与标志方法完美配合!下次我还会贴代码行问!
    • @user1876708 很高兴为您提供帮助!如果答案解决了您的问题,请将其标记为已接受(通过单击左侧的复选标记)以关闭问题。
    猜你喜欢
    • 2016-09-17
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    相关资源
    最近更新 更多