問題タブ [android-dialogfragment]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - アクティビティがバックグラウンドにある間に DialogFragment (サポート ライブラリ) を破棄すると、IllegalStateException が発生します
私のアプリのアクティビティでは、何かがアップロードされている間、「読み込み中」のキャンセルできない FragmentDialog を表示する必要があります。次のように、現在のアクティビティのコールバックからこのダイアログを表示します。
アップロードは、UI フラグメントから実行される保持されたフラグメント (asynctask を使用) で行われています。アップロードが完了すると、私の ui Fragment は onActivityResult で通知され、現在、ダイアログを閉じようとしています。以前は、onActivityResult でコールバックを実行して読み込みダイアログを閉じる責任を委任していましたが、これも機能しません。
アクティビティがフォアグラウンドにある間はこのダイアログを閉じることができますが、バックグラウンドにあるときは IllegalStateException: can't perform this action after onSaveInstaneState. が発生します。onRemove を使用してみましたが、アプリがクラッシュすることはありませんが、DialogFragment も非表示になりません。私はUIフラグメントとアクティビティの両方を実行しましたが、まだ問題があります。
ドキュメントを読んでいますが、使用できる方法が見つかりません。
DialogFragment は、必要なように使用することは想定されていませんか、それともどうすればよいですか?
android - DialogFragments を表示すると ICS がクラッシュする
Fragments API がリリースされた後、互換性パッケージを使用して、廃止されたすべてのダイアログを DialogFraments に移植し始めました。ダイアログが ICS のみにクラッシュを引き起こしていることに気付くまで、すべてがうまく機能していました。
ユーザーに http 応答を表示するために、私のダイアログは AsyncTask.onPostExecute() に表示されます。問題に飛び込んだ後、この例外はアクティビティが一時停止または停止したときにのみ発生し、他のバージョンの Android では発生しないという結論に達しました。commitAllowingStateLoss() を使用してみましたが、DialogFragment.show() で例外がスローされるため、役に立ちません。DialogFragment のコードは次のとおりです。
ICSのバグですか?私はどうしたらいいですか?
android - FragmentActivity に戻った後の IllegalStateException
これは、私のアプリケーションが直面していることを発見した再発の問題であり、いくつかの DialogFragments の使用に関連しています。私は主にプラットフォーム レベル 8 のデバイスをターゲットにしているので、DialogFragments を使用するには互換性ライブラリを使用する必要がありました。
アプリケーションを終了して戻ってくるたびに、問題自体が発生します。スタックトレースは次のとおりです。
そして、これが私の最小限の MainActivity です。
showNewChannelFragmentDialog() メソッドは、ユーザーが特定のメニュー オプションを選択したときにのみ呼び出されるため、DialogFragment 自体の内容はここでは関係ないと思います。
しかし、私がここに示されていることを正確に実行していることがわかります。実際に機能します。前述したように、問題は、ユーザーがアプリケーションを離れた後、アプリケーションが元の状態に戻るたびに発生することです。
助言がありますか?フラグメントを削除して、通常のダイアログのみを使用することを検討しています。
android - DialogFragment(Dialogではなく)onTouchOutsideを閉じる
Dialog onTouchOutsideを閉じることに関するすべての回答を検索しましたが、アプリケーションでDialogFragmentを使用しています。ユーザーがDialogFragmentの領域外をクリックしたときに、 DialogFragmentを閉じるにはどうすればよいですか。
ダイアログのソースコードでsetCanceledOnTouchOutsideを調べました
isOutOfBoundsである興味深いかもしれない別の関数があります
しかし、 DialogFragmentにこれらを利用する方法を理解できませんでした
これらに加えて、hierarchyviewer を使用してアプリケーションの状態を調べましたが、理解しているように、ダイアログの領域のみが表示され、その外側の部分(DialogFragmentの後の画面の残りの部分)は表示されません。
DialogFragmentにこのsetCanceledOnTouchOutsideを実装する方法を提案できますか?可能であればサンプルコードを使用してください。
android - weightSum を使用すると、Android Fragment Dialog が layoutMargin または layoutWidth を無視するように見える
だから私はいくつかの情報を選択するために使用されるボタンを押して作成したDialogFragmentを持っています。
親レイアウトのlayoutMarginまたは幅を指定した場合でも、weightSumのdiaglogを使用している場合、何をしても画面がいっぱいになります。
これは、3.2 を実行している Galaxy Tab で、互換ライブラリではなくデフォルトの Fragment ライブラリを使用しています。
どんな提案も役に立ちます。
ありがとう
以下は私が使用しているレイアウトです。
android - DialogFragmentはDialogの高さを設定します
DialogFragmentを使用して最初のDialogで作成したものを使用しました。ダイアログにレイアウトをラップさせることができないことを除いて、すべてがうまく機能します。私のレイアウトでは、すべての要素の高さが。になっていwrap_content
ます。
で、MyFragmentDialog
の高さを設定するために使用できることを意味するメソッドを見つけることさえできませんFragmentDialog
。私は何が欠けていますか?DialogFragmentをコンテンツに合わせるにはどうすればよいですか?
のメソッドDialogFrament
:onCreateView
レイアウトは次のとおりです。
ありがとう、
android - Handler から DialogFragment を表示する方法
特定のメッセージを受信したときに DialogFragment を表示するハンドラーがあります。これは通常は機能しますが、フラグメントが既に保存されている場合は、次のエラーが発生します。
E/AndroidRuntime(3898): FATAL EXCEPTION: main E/AndroidRuntime(3898): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState E/AndroidRuntime(3898): at android.support.v4.app.FragmentManagerImpl.checkStateLoss (FragmentManager.java:1299) E/AndroidRuntime( 3898): android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1310) で E/AndroidRuntime( 3898): android.support.v4.app.BackStackRecord で.commitInternal(BackStackRecord.java:541) E/AndroidRuntime(3898): android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:525) で E/AndroidRuntime(3898): android.support.v4.app で.DialogFragment.show(DialogFragment.java:123) E/AndroidRuntime(3898): com.malauzai.app.BaseActivity$2.handleMessage(BaseActivity.java:72) E/AndroidRuntime(3898): android.os.Handler.dispatchMessage(Handler.java:99)
これで、FragmentManager.beginTransaction の Javadoc に基づいて、これが予想されることがわかりました。
注: フラグメント トランザクションは、アクティビティがその状態を保存する前にのみ作成/コミットできます。Activity.onSaveInstanceState() の後 (および次の Activity.onStart または Activity.onResume() の前) にトランザクションをコミットしようとすると、エラーが発生します。これは、フレームワークが現在のフラグメントを状態に保存するためです。状態が保存された後に変更が行われると、それらは失われます。
私の問題は、それを防ぐ方法がわからないことです。を呼び出してみましHandler.removeMessages()
たonPause()
が、まだ発生します。フラグを設定して、設定onSaveInstanceState()
されている場合はフラグメントを表示しないようにしましたが、それでも発生します。これはかなり一般的な問題のようですが、うまくいく解決策が思いつきません。基本的に、フラグメントが既に保存されていることをどのように知ることができますか?
ところで、これは BaseActivity (FragmentActivity を拡張) で発生しますが、各アクティビティには独自のハンドラーがあるため、これは問題になるとは思いません。
私の最後の考えは を使用するFragment.commitAllowingStateLoss()
ことですが、それはハックのようです。
編集: 問題を引き起こしているコードは次のとおりです。
android - DialogFragment のクリック可能なハイパーリンク
これは、MainActivity クラス内に AlertDialog を作成するための静的内部クラスです。
MainActivity 内にあるメニュー項目を押すと表示されます。
コメント行を使用して、メッセージ テキスト内のリンクをクリックできるようにしようとしています。
ここでこのメソッドを見つけましたが、通常のダイアログ (フラグメントなし) を使用しているときにうまくいきました。
ただし、これを DialogFragment で使用しようとしたのはこれが初めてで、ビューを見つけようとすると常に NullPointerException が発生します。
私も試しましaboutFragment.getView().findViewById(android.R.id.message)
たが、それもnullを返します。
コードの呼び出しが早すぎたり、間違った場所で呼び出している可能性がありますか?
どんなアイデアも素晴らしいでしょう!
編集: onCreateView() で試し((TextView) v.getRootView().findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
て
((TextView) v.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
みましたが、onCreateDialog() で試しても成功しませんでした。
まだヌルポインター例外が発生しています...
android - Android: FragmentTransaction hide が DialogFragment に対して機能しない
追加しようとしています
FragmentTransactionに追加して、ユーザーが戻るボタンを押したときにダイアログが再表示されるようにしますが、機能していません。私は元々 DialogFragment で onCreateDialog をオーバーライドしましたが、 FragmentTransaction の非表示呼び出しのドキュメントに次のように記載されていることに気付きました。
これは、ビューがコンテナーに追加されたフラグメントにのみ関係します。
その代わりに、今は onCreateView をオーバーライドしています。今では隠れていますが、実際にはそうではありません。ダイアログはしぼむだけですが、ウィンドウはまだ暗いままです。それを取り除くには戻るボタンを押す必要がありますが、これは明らかに私が望んでいる動作ではありません。ここで何が欠けていますか?