0

アプリケーションがタスクを実行しているときに表示されるダイアログ フラグメントがあります。

onDestroy()アクティビティメソッドが呼び出されて実行されているタスクをキャンセルします。

ポップアップが表示されている間にユーザーが回転すると、android はアクティビティを破棄してから再描画します。そのため、メソッドでタスクをキャンセルするように指示しましたonDestroy()。その後、タスクの実行を停止し、ポップアップはそこにとどまります。通常、タスクが完了したときにのみ削除されます。

これはおそらく最善の方法ではないことは承知していますが、これで問題がすぐに解決し、他の問題が発生することはないと思います (私が知っていることです)。

ポップアップが表示される直前にアプリケーションの回転を無効にしたいのですが、ダイアログが消えたときに再度有効にしたいと考えています。

プログラムでこれを行うにはどうすればよいですか?

そのように: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

そして、どこでそれをしますか?onCreate()ダイアログの?または、アクティビティからダイアログを呼び出す前に?

4

2 に答える 2

0

これをやってみて、あなたの経験を教えてください!onDestroy() の実装を呼び出すときに使用します

onDestroy(){
    OrientationListener foo = new OrientationListener(this.getContext());
    foo.disable();
}

これがうまくいかない場合は近いと思います。とにかく、 これを見てください。

これがお役に立てば幸いです。

于 2014-05-19T11:19:19.307 に答える
0

ダイアログとハンドルの向きに onDismiss および onShow リスナーを実装してみてください。たとえば、次のようにします。

public class MyActivity extends Activity
    implements DialogInterface.OnDismissListener,DialogInterface.OnShowListener{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AlertDialog alertDialog = new 
        AlertDialog.Builder(MainActivity.this).create();
        alertDialog.setTitle("Alert");
        alertDialog.setMessage("Alert message to be shown");
        alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        alertDialog.setOnShowListener(this);
        alertDialog.setOnDismissListener(this);
        alertDialog.show();
    }
    @Override
    public void onShow(DialogInterface dialog) {
        final int screenOrientation = ((WindowManager)  getbaseContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getOrientation();
        switch (screenOrientation){
        case Surface.ROTATION_180:
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
            break;
        case Surface.ROTATION_270:
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
            break;
        case Surface.ROTATION_0:
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            break;
        case Surface.ROTATION_90:
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            break;
    }
    }
    @Override
    public void onDismiss(DialogInterface dialog) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
    }
}  

これが誰かに役立つことを願っています。

于 2018-03-27T19:51:52.187 に答える