防止Android对话扩展活动

时间:2013-04-30 14:15:36

标签: java android dialog extend

如何阻止我的对话框扩展活动?

当我在我的主要活动中创建它时,当我点击“Okay”时,它不会自行解除,这会创建一个新活动。创建的新活动从MainActivity扩展。

我正在使用共享偏好设置来确定用户在打开应用时的位置。我不确定这是否适合这种情况。

我想阻止对话框扩展MainActivity。它不应该出现在我创建的其他活动上。

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  SharedPreferences sharedPreferences = getSharedPreferences("version", 0);
  int savedVersionCode = sharedPreferences.getInt("VersionCode", 0);
  int appVershionCode = 0;

  try { appVershionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode; }
  catch (NameNotFoundException nnfe) { Log.w(TAG, "$ Exception because of appVershionCode : " + nnfe); }   

  if(savedVersionCode == appVershionCode){

      // Returning user
      Log.d(TAG, "$$ savedVersionCode == appVershionCode");

      // Temporary Navigation
      final Builder alertDialogBuilder = new Builder(this);
      new AlertDialog.Builder(new ContextThemeWrapper(getBaseContext(), android.R.style.Theme_Dialog));
      alertDialogBuilder.setTitle("Temporary Navigation");
      alertDialogBuilder.setMessage("Go to the new activity.");
      alertDialogBuilder.setPositiveButton("Okay", new OnClickListener() {
          @Override
          public void onClick(DialogInterface dialog, int which) {
           Log.d(TAG, "$$ onClick");
              Intent newactivity = new Intent(MAINACTIVITY.this,NEWACTIVITY.class);
              startActivity(newactivity);
              dialog.cancel();
          }
      });
      alertDialogBuilder.show();
      // End

  } else {

      // First time visitor
      Log.d(TAG, "$$ savedVersionCode != appVershionCode");

      // Hide graphics meant for returning users
      ((Button)findViewById(R.id.Button01)).setVisibility(View.INVISIBLE);

      SharedPreferences.Editor sharedPreferencesEditor = sharedPreferences.edit();
      sharedPreferencesEditor.putInt("VersionCode", appVershionCode);
      sharedPreferencesEditor.commit();

      Builder alertDialogBuilder = new Builder(this);
      alertDialogBuilder.setTitle("Welcome");
      alertDialogBuilder.setMessage("Click Okay to continue.");

      alertDialogBuilder.setNeutralButton("Okay", new OnClickListener() {

          @Override
          public void onClick(DialogInterface dialog, int which) {
           Log.d(TAG, "$$ onClick");
              Intent leagues = new Intent(MAINACTIVITY.this,NEWACTIVITY.class);
              startActivity(leagues);
          }
      });

      alertDialogBuilder.show();

  }
}

2 个答案:

答案 0 :(得分:0)

尝试dialog.dismiss()之类的:

@Override
      public void onClick(DialogInterface dialog, int which) {
       Log.d(TAG, "$$ onClick");
          Intent newactivity = new Intent(MAINACTIVITY.this,NEWACTIVITY.class);
          startActivity(newactivity);
          dialog.dismiss();
      }

答案 1 :(得分:0)

从对代码的一点了解,我的建议是检查何时需要显示对话框以及何时不显示对话框。例如,您可以使用静态布尔标志showDialog ,根据用途在您的活动中将其设置为true / false。

if(savedVersionCode == appVershionCode && showDialog)

if(savedVersionCode == appVershionCode && !showDialog)

更多的是程序化解决方案的程序化问题。这种做法只是一个建议。当您遵循 singleTon 类型的结构时,您必须确定要进一步携带的方法。

第二种方法可能是,不要这样做。您希望在活动中实施的常用方法与 SharedPref 检查相关,为什么不这样做:

  1. 创建一个扩展Activity的类。
  2. 在其中添加与您的SharedPref相关的方法。
  3. 现在您可以将该课程扩展到您的所有活动。

    public class commonMethod extends Activity{
    
    public void my_sharedPrefMethod(){
    // do some thing with prefs
    }    
    
    @OverRide
    public void onCreate(){
    super.onCreate();
    // common onCreate code for every activity. Recommend not to change this
    // so that you can implement  
    }
    
    // you can also write other methods onPause(), onDestroy() here too.
    {
    
  4. 现在,您可以使用此类commonMethod扩展您的类。 e.g

        public class main extends commonMethod{
    
        @overRide
        public void oncreate(){
        }
    
        @overRide
        public void my_sharedPrefMethod(){
        }
    
        public void showMyDialog(){
        // this way dialog box would not be shown on every activity but just this one.
        } 
        }