アプリケーションの通知からポップアップを表示していますが、通知を確認すると、アプリケーションからアクティビティが実行されていないため、ダイアログを表示すると通知が表示されます。アクティビティが実行されておらず、ダイアログ コンストラクターに渡すコンテキストが null であるため、ダイアログは例外をスローします。そのため、アクティビティが実行されていないときにコンテキストが必要です。または、事前にこれを実装する方法についてのアイデア
5 に答える
あなたのコードは Android のバックグラウンドで実行されていると思いますService
。その場合、 yourService
はContext
それ自体なので、必要なときに使用できます。
コードが Android ではなくバックグラウンド スレッドで実行されているService
場合 (この場合、他の大きな問題があります)、アプリケーション コンテキストのインスタンスを使用できます。を呼び出して取得し、バックグラウンド コードを開始するContext.getApplicationContext
で取得して、後で使用できるようにキャッシュすることができます。Activity
ただし、アクティビティ コンテキストの代わりにアプリケーション コンテキストを使用すると、特定の落とし穴があることに注意してください。たとえば、LayoutInflater
アプリケーション コンテキストから使用することはできません。
ダイアログを拡張し、Activity クラスを作成して、そのテーマをマニフェスト ファイルのダイアログに変更できます。この場合、 を呼び出しますnotification.setLatestEventInfo(YourActivityDialog.this, contentTitle, contentText, contentIntent);
。
私は同じ問題に苦しんでいました。アクティビティでスピナーを使用できません。setContentView
次のようなものを使用してこれを解決しました
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
View viewToLoad = LayoutInflater.from(this.getParent()).inflate(R.layout.main, null);
this.setContentView(viewToLoad);
}
ダイアログに別のアクティビティを使用する別の方法。次のようにアクティビティを設定することにより、
style.xml
<resources>
<style name="AppTheme" parent="android:Theme.Dialog">
<item name="android:windowNoTitle">true</item>
</style>
</resources>
AndroidManifest では、このようなアクティビティを宣言します
<activity
android:name="DialogActivity"
android:theme="@style/AppTheme" />
@Override
protected Dialog onCreateDialog(int i)
{
LayoutInflater factory = LayoutInflater.from(this);
final View textEntryView = factory.inflate(R.layout.sendemail, null);
final View textEntryView1 = factory.inflate(R.layout.sendemail_title, null);
to_id = (EditText) textEntryView.findViewById(R.id.edit_text_sender_mail_id);
from_id =(EditText) textEntryView.findViewById(R.id.id);
pwd =(EditText) textEntryView.findViewById(R.id.pwd);
return new AlertDialog.Builder(current_activity.this)
.setTitle("hello")
.setCustomTitle(textEntryView1)
.setView(textEntryView)
.setPositiveButton("Send", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
// code here...
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton)
{
System.exit(0);
}
})
.create();
}
MyApplication
から継承されたクラスを作成Application
し、そのクラス内で次のことを行うことができます。
public class MyApplication extends Application {
private static MyApplication instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
.........
}
public static Context getContext() {
return instance;
}
その後、コンテキストが必要で、横たわってMyApplication.getContext()
いない場合は、どこでも使用できます。Activity