2017-05-12 12 views
0

私は、アプリケーションのメインアクティビティの起動時に警告ダイアログを表示するアプリケーションを作成していますが、別のアクティビティからメインアクティビティに戻ると、私は一度、アプリ起動時に警告ダイアログを表示したい、それを行う方法?アプリの起動ごとに警告ダイアログを表示する方法

if(isFirstRun) { 
     AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this); 

     alertDialog.setTitle("Alert"); 
     alertDialog.setMessage("You need to have Mobile data or Wifi to access all features."); 
     alertDialog.setIcon(R.drawable.ic_error); 

     alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
      } 
     }); 

     alertDialog.show(); 
    } 

    isFirstRun = false; 

ワーキングコード: -

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 

    boolean isFirstRun = sharedPreferences.getBoolean("IS_FIRST_RUN", true); 

    if(isFirstRun == true) { 
     AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this); 

     alertDialog.setTitle("Alert"); 
     alertDialog.setMessage("You need to have Mobile data or Wifi to access all features."); 
     alertDialog.setIcon(R.drawable.ic_error); 

     alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
      } 
     }); 

     alertDialog.show(); 

     // Update 
     editor.putBoolean("IS_FIRST_RUN", false); 
     editor.commit(); 
    } 

オーバーライドonDestroy方法: -

@Override 
protected void onDestroy() { 
    super.onDestroy(); 

    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 

    // Update 
    editor.putBoolean("IS_FIRST_RUN", true); 
    editor.commit(); 
} 
+0

投稿したコードを投稿しますか? –

+0

@Prera​​kSolaは私が今使っているが動作していないコードを追加しました –

+0

共有環境設定でタグを設定してみませんか?ダイアログが最初に表示されたら、その値をtrueに設定し、次回戻ったときにfalseであるかどうかをチェックしてからshow、それ以外の場合は非表示にします。 – Eenvincible

答えて

0

の値を後で使用するために永久に保存するには、SharedPreferencesを使用します。

あなたMainActivityonCreate()メソッドのコードの行の下に追加します。

@Override 
protected void onDestroy() { 
    super.onDestroy(); 

    PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 

    // Update 
    editor.putBoolean("IS_FIRST_RUN", false); 
    editor.commit(); 
} 

OR、はあなたが拡張classを作成することができます。

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
SharedPreferences.Editor editor = sharedPreferences.edit(); 

boolean isFirstRun = sharedPreferences.getBoolean("IS_FIRST_RUN", false); 

if(isFirstRun) { 
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this); 

    alertDialog.setTitle("Alert"); 
    alertDialog.setMessage("You need to have Mobile data or Wifi to access all features."); 
    alertDialog.setIcon(R.drawable.ic_error); 

    alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     } 
    }); 

    alertDialog.show(); 

    // Update 
    editor.putBoolean("IS_FIRST_RUN", true); 
    editor.commit(); 
} 

があなたの活動にonDestroy()方法をIS_FIRST_RUNをリセットApplicationクラスから上記のリセット操作をその01の内部に追加するメソッド。

希望すると便利です〜

+1

その機能していない! –

+0

あなたは更新されたコードを投稿できますか? – FAT

+0

更新された回答を確認してください。 SharedPreferencesを使用するsharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); – FAT

-1

アプリケーションクラスからの火災、それをオフにします。おそらくいくつかの修正を取るだろう、私はちょうどこれを起草し、ちょうどヘッドアップこの

MyApplication extends Application { 
    override public void onCreate() { 
     this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       // Show your dialog 
      } 
     }); 
    } 
} 

のようなものを試してみて、それは一般的な要点です。

+0

の例を挙げることができますが、ツールバーの3番目のアクティビティのホームボタンを押すと、メインのアクティビティと警告ダイアログが再び表示されます。 –

+0

インテントのインテント=新しいインテント(getApplicationContext()、MainActivity.class); startActivity(インテント); - 私はホームボタンのこのコードonClickイベントを使用しています –

+0

これはアクティビティのコンテキストにありません。これがアプリケーションコンテキストです。アプリケーションonCreate()は、アプリの起動時にのみ呼び出されます。ビューがバックスタックに追加された場合(ダイアログは表示されないはずですが、誤っている可能性があります)、そのビューに戻って再表示することができます。アクティビティの作成時にこれを実行すると、アクティビティが破棄されて再び表示されるたびに、ダイアログが表示されます – PSchuette

-1

isFirstRun staticを試してみてください。これにより、変数はインスタンス変数ではなくクラス変数になります。ここで定義され

:あなたはこの変数をfalseに変更すると、アプリケーションが完全にし、再度開いて閉じられるまで https://softwareengineering.stackexchange.com/questions/293478/what-are-the-differences-between-class-variables-and-instance-variables-in-java

をそうで、それが偽のままになります。つまり、別のアプリケーションから戻ってくると、それは誤ったままになります。

MyApplication extends Application { 

private static isFirstRun = true; 

@override 
public void onCreate() { 
    if(isFirstRun) { 
     AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this); 

     alertDialog.setTitle("Alert"); 
     alertDialog.setMessage("You need to have Mobile data or Wifi to access all features."); 
     alertDialog.setIcon(R.drawable.ic_error); 

     alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
      } 
     }); 

     alertDialog.show(); 
    } 

    isFirstRun = false; 
} 

} 
+0

もう1つの問題は、3つ目のアクティビティのツールバーにあるホームボタンをクリックすると、メインアクティビティとアラートダイアログが再度表示されるという問題です。 –

+0

インテントのインテント=新しいインテント(getApplicationContext()、MainActivity.class); startActivity(インテント); - 私はホームボタンのonClickメソッドでこのコードを使用しています –

-1

使用sharedpreferenceその問題について、それがより簡単になるだろう、以下

は、あなたがそれを打つことができる方法です。

まず第onCreateの方法でアプリ内一番最初の初期化sharedPreference:

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode 
    Editor editor = pref.edit(); 
    editor.putBoolean(IS_FIRST_RUN, true); 
    editor.commit(); 

この文字列もまた覚えておいてください:

private static final String IS_FIRST_RUN = "IsFirstRun"; 

だからisFirstRun私たちの方法以来、私たちは共有好みのいくつかのロジックに配置する必要がありますし、isFirstRun == Trueたちは、ダイアログを表示するか、他の何かをすれば、私たちは確認してください。

// Get isFirstRun State here 
    public boolean isFirstRun(){ 
     return pref.getBoolean(IS_FIRST_RUN, true); 
    } 

次に、あなたのコードを持参し、言う:

 if(isFirstRun) { 
       AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this); 

       alertDialog.setTitle("Alert"); 
       alertDialog.setMessage("You need to have Mobile data or Wifi to access all features."); 
       alertDialog.setIcon(R.drawable.ic_error); 

       alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
        } 
       }); 

       alertDialog.show(); 

    SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); 
     Editor editor = pref.edit(); 
     editor.putBoolean(IS_FIRST_RUN, false); 
     editor.commit(); 
      } 

    else { 
    // do something 
    } 
-1

を、私はそれを行うような方法だけAlertDialogを示し、透明なテーマを持つユニークな活動を実施することです。 AlertDialogが確認またはキャンセルされると、既存のアクティビティをインテントとして起動できます。おそらく、リスナーを追加することもできます。

ダイアログがMainActivityのルーチン部分として機能しない場合、ボトムラインはそのデザインの一部を構成すべきではありません。責任を分ける。

@Override 
public void onCreate(Bundle savedInstanceState){ 
super.onCreate(savedInstanceState); 
setContentView(R.layout.transparent); 

AlertDialog.Builder alertDialog = new AlertDialog.Builder(DialogActivity.this); 

alertDialog.setTitle("Alert"); 
alertDialog.setMessage("You need to have Mobile data or Wifi to access all features."); 
alertDialog.setIcon(R.drawable.ic_error); 

alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     Intent i = new Intent(DialogActivity.this, MainActivity.class); 
     startActivity(i); 
     DialogActivity.this.finish(); 
    } 

}); } 

あなたはランチャーとしてあなたが欲しいのアクティビティ(DialogActivity)を設定していることを確認します。

 <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
関連する問題