2016-07-14 8 views
0

アクティビティではない単純なJavaクラスでAlertDialogを使用しようとしています。私にはアクティビティはありません。アクティビティではなくジェネリッククラスでAlertDialogを動作させる方法

私はでそれを初期化しようとしています:

alertDialog = new AlertDialog.Builder(context).create(); 

と私は、問題は、私が代わりにgetApplicationContextまたは[現在のContextを使用していますことを目に見えると思います。

私はAsyncTaskを拡張するクラスで作業していますが、単純にコンテキストを記述するのではなく、別のものが必要なAlertDialogを動作させることはできません。

Context context; 
ClassConstructor (Context ctx){ 
    context = ctx; 
} 

これは私がコンテキストを取得する方法である:

私はこのコードによってコンテキストを生成しました。

私はPHP/SQL-Androidのチュートリアルに従っており、この問題に追いついています。私は何かを逃したと思うが、私はそれ以上追いつくことができないので誰も解決策を提供することができますか?

答えて

0

ダイアログで.show()に電話する必要があります。ダイアログを表示するためにアクティビティコンテキストは必要ありません。あなたは、代替ダイアログをテーマにした活動を使用し、Context.startActivity()を使用することです、あなたのアプリが権限を持っている必要があります

public class AlertDialogService extends Service { 
    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
    AlertDialog.Builder b = new AlertDialog.Builder(getApplicationContext()).setTitle("Test Alert").setMessage("This is a test."); 
    Dialog d = b.create(); 
    d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 
    d.show(); 

    return START_NOT_STICKY; 
    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
    return null; 
    } 
} 

は注意、

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 

、システムのアラートダイアログとしてダイアログをマークする必要がありますそれを表示する。

+0

。アクティブになり、エラーがスローされます。 Context.startActivity()を使用する詳細な方法を教えてください。私はそれを理解できませんでした。 – user3314639

+0

ただの提案ですが、ここでエラーを報告し、その助けを得ることを望む場合は、エラーの性質についてすべてのものを含めます。 –

+0

また、「ダイアログのテーマのアクティビティ」のためのグーグルから始めます。あなたが望むものが見つからない場合、あなたのために働いていないものの詳細を別の質問で尋ねます。 –

0

ダイアログtypeWindowManager.LayoutParams.TYPE_SYSTEM_ALERTと指定しない限り、アクティビティContextのインスタンスを使用してAlertDialogを表示する必要があります。 ApplicationContextを使用しようとすると、android.view.WindowManager$BadTokenExceptionというエラーが発生します。ここ

詳細:.SHOW()しかし、ときに私はそれを呼び出すことで、私はそれを呼び出していますhttps://stackoverflow.com/a/10159345/2387695

+0

はい。これは投げている例外です。 – user3314639

+0

右。だから、 'ActivityContext'のインスタンスをJavaクラスのプレーンに渡す限り、正常に動作します。つまり、含まれているアクティビティの 'getContext'の結果をあなたのPOJOクラスに渡します。 FragmentsやAlertDialogのようなUIを扱っているときはいつでも、アクティビティのコンテキストを使用する必要があることを覚えておいてください。 – Travis

+0

@Travisこれは正しくありません。ダイアログがシステムダイアログとしてマークされている限り、正常に動作します。興味深い@JeffreyBlattman: –

関連する問題