如何在特定条件下处理dialog.dismiss?

时间:2012-12-04 18:50:59

标签: android android-activity dialog

这是我的问题,

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

我正在使用滑动和

StartActivity(farm1);
finish();

StartActivity(farm2);
finish();

正如您所看到的,当我从farm2导航到farm1时,我开始此活动,因此,我的对话框再次出现!

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

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

  • 我可以在farm1和farm 2活动之间导航,而无需再次启动它们,这样我的对话框就不会再出现了。
  • 只有在从我的主菜单活动启动farm1时才可以显示此对话框吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以使用Intent发送标志,您将从该标志启动farm1 Activity:

步骤1:当您启动farm1活动时,从主菜单活动发送含有标志的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

执行此操作