5

新人アンドロイド開発者はこちら。AsyncTask の ProgressDialog に問題があります。

ProgressDialog を作成するときにテーマを適用したいのですが、それを適用すると、ダイアログがフルスクリーンになり、アクティビティが非表示になります。インスタンス化時にテーマを削除すると、正常です。

理由を知りたいだけです。

AsyncTask を使用した私のクラスは次のとおりです。

パブリッククラス同期{

private static AppManager       app = AppManager.getInstance();

public void Synchronise() {
}

AsyncTask<Void, Void, Boolean> task = new AsyncTask<Void, Void, Boolean>() {

    private ProgressDialog  pd;

    @Override
    protected void onPreExecute() {;
        pd = new ProgressDialog(app.m_AppContext, android.R.style.Theme_Black);
        pd.setTitle("Veulliez patienter");
        pd.setMessage("Synchronisation en cours...");
        pd.setCancelable(false);
        pd.setIndeterminate(true);
        pd.show();
    }

    @Override
    protected Boolean doInBackground(Void... arg0) {
        try {
            //Synchronisation
            Thread.sleep(2000);
            Log.d("DEBUG","sync en cours");
        } catch (InterruptedException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    @Override
    protected void onPostExecute(Boolean result) {
        pd.dismiss();
        if (result)
            Toast.makeText(app.m_AppContext, "Synchronisation terminé avec succès", Toast.LENGTH_SHORT).show();
        else
            Toast.makeText(app.m_AppContext, "La synchronisation a échoué", Toast.LENGTH_SHORT).show();
        Log.d("DEBUG","SYNC DONE");
    }
};

public void startSync() {
    if (app.m_bIsOnline)
        task.execute((Void[])null);
    else
        Toast.makeText(app.m_AppContext, "Mode offline. Synchronisation impossible", Toast.LENGTH_SHORT).show();            
}

}

手伝ってくれてありがとう。

4

1 に答える 1

1

スタイルの親をダイアログに変更する必要があります。例えば:

<style name="AppTheme.Light" parent="Theme.AppCompat.Dialog" >
        <item name="colorAccent">@color/theme_color</item>
        <item name ="android:background">@color/theme_background_light</item>
        <item name = "android:textColor">@color/black</item>
</style>
于 2015-11-03T12:56:29.640 に答える