2

AsyncTaskを使用してファイルをダウンロードしています。そこで私は進歩を実行しました:

//Updating progress dialog
protected void onProgressUpdate(Integer... changed) {
    progressDialog.setProgress(changed[0]);
}

//STARTED 
@Override
protected void onPreExecute() {

    try {
        progressDialog = new ProgressDialog(context);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setMessage(context
                .getString(R.string.message_loading));
        progressDialog.setCancelable(false);
        progressDialog.show();
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
}

ポートレートとランドスケープではすべてが正常に機能しています。ファイルがダウンロードされたことを通知するために、インターフェイスを使用しています。

間違っているのは、ポートレートまたはランドスケープでファイルのダウンロードを開始し、それが行われていないときにデバイスを回転させた後、進行状況が消え、どこに行くべきかわからないため、コールバックが例外を起動することです。

デバイスを回転させると、アクティビティが再作成されるので、これを適切に行う方法。ダウンロードを開始したときにユーザーがデバイスを回転できないことを制限する必要があります。その方法は次のとおりです。

またはこれに対する解決策はありますか?

4

2 に答える 2

1

ダウンロードが開始されたときに、ユーザーがデバイスを回転できなかったことを制限する必要があります。

このため、進行状況ダイアログを表示する前に、デバイスの向きを修正する必要があります。

onPreExecute(){
.....
.....
Activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//in case activity started in landscape mode
progressDialog.show();
}

ダウンロードが完了したら、通常の向きの変更に戻ることができます。

onPostExecute(){
Activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
progressDialog.dismiss();
}

私が提案するもう1つの解決策..アクティビティの向きを制限しないでください。代わりに、マニフェストファイルに「configChanges = "Orientation"」属性を追加し、 onPreExecute() メソッドと setProgress(進行中) null でない場合。

onPreExecute(){
if(progressDialog!=null){
   progressDialog.setProgress(progress);
}
else{
......
......
}
}
于 2012-05-23T05:50:14.390 に答える
1

ダウンロード中に向きを制限したい場合は、ダウンロードを開始する直前にこのコードを使用してください。これにより、ユーザーのデバイスの向きが制限されます。

int current_orientation = getResources().getConfiguration().orientation;
if (current_orientation == Configuration.ORIENTATION_LANDSCAPE) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

このコードは、オリエンテーションを終了した後に使用でき、ユーザーがデバイスを再度回転できるようにします。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

それがあなたを助けることを願っています。

于 2012-05-23T05:32:32.947 に答える