4

アクティビティでインテントフィルターを使用して、ユーザーがクリックしたURLを取得しています。

私のアクティビティonCreateメソッドには、次のコードがあります

    Intent intent = getIntent();
    if (Intent.ACTION_VIEW.equals(intent.getAction())) {
        url = intent.getDataString();
        showDialog(DIALOG_ID);          
    }

電話を回転させる場合を除いて、うまく機能します。ローテーションの前にダイアログを閉じていても、電話の向きを変えるたびにダイアログが再び開きます。私はそれを避けることができます。

参考までに、オリエンテーションをロックしたくない

4

4 に答える 4

5

構成の変更を自分で処理する必要がない別の解決策は、ダイアログを表示する前に、onCreateのsavedInstanceStateBundleパラメーターがnullかどうかを確認することです。

onCreateのドキュメントを見ると、アクティビティが再作成されたとき(たとえば、構成の変更のため)、savedInstanceStateがnull以外になり、アクティビティが新しく実行されたときにnullになることがわかります。

于 2012-08-23T00:54:19.577 に答える
3

通常setIntent(null)、アクティビティを呼び出すために使用されたインテントを削除するために呼び出します。ただし、実際には、常に機能するとは限りません。どうやら、一般的な回避策は、コードで使用するものに応じて、インテントのアクションまたはデータ、あるいはその両方をnullに設定することです。あなたの場合、ダイアログを表示した後、私はおそらくintent.setAction(null)

于 2014-03-07T13:25:54.460 に答える
2

これは非常に簡単な修正です。マニフェストファイルで、アクティビティを見つけてこれを追加します。

android:configChanges="keyboardHidden|orientation"

これにより、onCreateのロジックが再度起動するのを防ぐことができます(またはそう信じています)

ここから引用:

特殊なケースでは、1つ以上のタイプの構成変更に基づいて、アクティビティの再開をバイパスしたい場合があります。これは、マニフェストのandroid:configChanges属性を使用して行われます。そこで処理すると言うあらゆるタイプの構成変更について、再起動する代わりに、現在のアクティビティのonConfigurationChanged(Configuration)メソッドへの呼び出しを受け取ります。ただし、構成の変更に処理しないものが含まれる場合でも、アクティビティは再開され、onConfigurationChanged(Configuration)は呼び出されません。

于 2012-06-08T22:00:34.420 に答える
0

私は今日までこの問題を見たことがありません。やったgetIntent().setAction("");、解決した。これ以上の脳の損傷はありません:)

于 2017-10-26T23:16:47.060 に答える