2015-05-31 53 views
-1

我有一個擴展Application的類。 的目標是顯示一個AlertDialog(1個OK按鈕),在apllication開始後,然後才(每用戶運行的應用程序的時間,但每次輸入用戶從其它活動的主要活動時間不)。如何在擴展應用程序的類中顯示AlertDialog

主要活動的名稱是Activity1。

所以這裏是一個擴展應用程序的類:

public class MyApp extends Application { 
     @Override 
     public void onCreate() { 
      super.onCreate(); 

      Activity1 myActivity1=new Activity1(); 

      AlertDialog.Builder builder = new AlertDialog.Builder(myActivity1); 
      builder.setMessage("Hello").setCancelable(false).setPositiveButton("OK",                 new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        //do things 
       } 
      }); 
      AlertDialog alert = builder.create(); 
      alert.show(); 
     } 
    } 

這是我的錯誤:

java.lang.RuntimeException: Unable to create application…...NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference 

我猜活動1是不正確的說法。我也嘗試了這個「這個」論點。我的意思是:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 

它也沒有幫助。

如果有人有這個任何想法,我會感激的幫助。謝謝!

+1

爲什麼不在主Activity的onCreate()方法中顯示對話框? –

+0

@ Bidhan A嗨,因爲每當我進入這個活動時,我都會看到這個對話框,我希望只在應用程序開始時才能看到它。 – Eliran

+0

抱歉挑剔,但您需要定義「應用程序開始」的含義。 這是第一次創建MainActivity(而不是在每個方向之後)? 如果我按回家按鈕,離開它一段時間,然後回來?請注意,該活動可能仍然在後臺,因此它只是放在前臺。 – user3673613

回答

2

你需要有擴展,有一個布爾值應用的一類。這用於存儲持續運行應用程序的全局值。

public class MyApplication extends Application { 
    public boolean hasShownAlertDialog = false; // you can do private and use getter/setters, but, that's frowned upon. 
} 

在您的Android清單中,在應用程序下,您需要定義您使用的是自定義實現。

<application android:name="com.example.MyApplication" [...]> 

在你的活動1,中的onCreate,你檢查全局變量:

public void OnCreate(Bundle bundle) { 
    ... 
    if (!(MyApplication)getApplication().hasShownAlertDialog) { 
     // show alert dialog 
     (MyApplication)getApplication().hasShownAlertDialog = true; 
    } 
} 
+0

嗨,如果Activity1將顯示警報對話框,我會在每次輸入此活動時看到此對話框。我的目標是每次開始申請時都會看到此對話框,而不是每次進入活動時。 – Eliran

+0

啊。然後你想擴展應用程序,在android清單中聲明你正在這樣做,添加一個布爾值來存儲應用程序在當前運行期間是否顯示該對話框。我將用代碼示例編輯我當前的答案。 :) – Zadrox

+0

我會檢查它並復出。 – Eliran

0

使用全局變量來確定,如果你已經所示的對話框與否。你MyApp的是這樣的

public class MyApp extends Application { 

    // showDialog will be true for the first time 
    private boolean showDialog = true; 

    public boolean getDialog() { 
     return showDialog; 
    } 

    public void setDialog(boolean showDialog) { 
     this.showDialog = showDialog; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 



    } 
} 

那麼你的活動1的onCreate()方法中添加以下

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    boolean showDialog = ((MyApp) this.getApplication()).getDialog(); 
    if(showDialog == true) { 
     //Toast.makeText(this, "Show dialog", Toast.LENGTH_LONG).show(); 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage("Hello").setCancelable(false).setPositiveButton("OK",                 new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       //do things 
      } 
     }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
     // Set showDialog to false now so you don't see it again 
     ((MyApp) this.getApplication()).setDialog(false); 
    } 
    else { 
     Log.d("DIALOG", "Do not show dialog"); 
    } 

} 

不要忘了申報清單文件裏面你的應用程序類。在<application>標籤內部添加android:name=".MyApp"。例如:

<application 
    android:name=".MyApp" 
    android:icon="" 
    .... 
> 
相關問題