問題タブ [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.

0 投票する
2 に答える
5502 参照

android - アクティビティがバックグラウンドにある間に DialogFragment (サポート ライブラリ) を破棄すると、IllegalStateException が発生します

私のアプリのアクティビティでは、何かがアップロードされている間、「読み込み中」のキャンセルできない FragmentDialog を表示する必要があります。次のように、現在のアクティビティのコールバックからこのダイアログを表示します。

アップロードは、UI フラグメントから実行される保持されたフラグメント (asynctask を使用) で行われています。アップロードが完了すると、私の ui Fragment は onActivityResult で通知され、現在、ダイアログを閉じようとしています。以前は、onActivityResult でコールバックを実行して読み込みダイアログを閉じる責任を委任していましたが、これも機能しません。

アクティビティがフォアグラウンドにある間はこのダイアログを閉じることができますが、バックグラウンドにあるときは IllegalStateException: can't perform this action after onSaveInstaneState. が発生します。onRemove を使用してみましたが、アプリがクラッシュすることはありませんが、DialogFragment も非表示になりません。私はUIフラグメントとアクティビティの両方を実行しましたが、まだ問題があります。

ドキュメントを読んでいますが、使用できる方法が見つかりません。

DialogFragment は、必要なように使用することは想定されていませんか、それともどうすればよいですか?

0 投票する
2 に答える
5983 参照

android - DialogFragments を表示すると ICS がクラッシュする

Fragments API がリリースされた後、互換性パッケージを使用して、廃止されたすべてのダイアログを DialogFraments に移植し始めました。ダイアログが ICS のみにクラッシュを引き起こしていることに気付くまで、すべてがうまく機能していました。

ユーザーに http 応答を表示するために、私のダイアログは AsyncTask.onPostExecute() に表示されます。問題に飛び込んだ後、この例外はアクティビティが一時停止または停止したときにのみ発生し、他のバージョンの Android では発生しないという結論に達しました。commitAllowingStateLoss() を使用してみましたが、DialogFragment.show() で例外がスローされるため、役に立ちません。DialogFragment のコードは次のとおりです。

ICSのバグですか?私はどうしたらいいですか?

0 投票する
1 に答える
746 参照

android - FragmentActivity に戻った後の IllegalStateException

これは、私のアプリケーションが直面していることを発見した再発の問題であり、いくつかの DialogFragments の使用に関連しています。私は主にプラットフォーム レベル 8 のデバイスをターゲットにしているので、DialogFragments を使用するには互換性ライブラリを使用する必要がありました。

アプリケーションを終了して戻ってくるたびに、問題自体が発生します。スタックトレースは次のとおりです。

そして、これが私の最小限の MainActivity です。

showNewChannelFragmentDialog() メソッドは、ユーザーが特定のメニュー オプションを選択したときにのみ呼び出されるため、DialogFragment 自体の内容はここでは関係ないと思います。

しかし、私がここに示されていることを正確に実行していることがわかります。実際に機能します。前述したように、問題は、ユーザーがアプリケーションを離れた後、アプリケーションが元の状態に戻るたびに発生することです。

助言がありますか?フラグメントを削除して、通常のダイアログのみを使用することを検討しています。

0 投票する
5 に答える
15189 参照

android - DialogFragment(Dialogではなく)onTouchOutsideを閉じる

Dialog onTouchOutsideを閉じることに関するすべての回答を検索しましたが、アプリケーションでDialogFragmentを使用しています。ユーザーがDialogFragmentの領域外をクリックしたときに、 DialogFragmentを閉じるにはどうすればよいですか。

ダイアログソースコードsetCanceledOnTouchOutsideを調べました

isOutOfBoundsである興味深いかもしれない別の関数があります

しかし、 DialogFragmentにこれらを利用する方法を理解できませんでした

これらに加えて、hierarchyviewer を使用してアプリケーションの状態を調べましたが、理解しているように、ダイアログの領域のみが表示され、その外側の部分(DialogFragmentの後の画面の残りの部分)は表示されません。

DialogFragmentにこのsetCanceledOnTouchOutsideを実装する方法を提案できますか?可能であればサンプルコードを使用してください。

0 投票する
1 に答える
1075 参照

android - weightSum を使用すると、Android Fragment Dialog が layoutMargin または layoutWidth を無視するように見える

だから私はいくつかの情報を選択するために使用されるボタンを押して作成したDialogFragmentを持っています。

親レイアウトのlayoutMarginまたは幅を指定した場合でも、weightSumのdiaglogを使用している場合、何をしても画面がいっぱいになります。

これは、3.2 を実行している Galaxy Tab で、互換ライブラリではなくデフォルトの Fragment ライブラリを使用しています。

どんな提案も役に立ちます。

ありがとう

以下は私が使用しているレイアウトです。

0 投票する
4 に答える
17799 参照

android - DialogFragmentはDialogの高さを設定します

DialogFragmentを使用して最初のDialogで作成したものを使用しました。ダイアログにレイアウトをラップさせることができないことを除いて、すべてがうまく機能します。私のレイアウトでは、すべての要素の高さが。になっていwrap_contentます。

で、MyFragmentDialogの高さを設定するために使用できることを意味するメソッドを見つけることさえできませんFragmentDialog。私は何が欠けていますか?DialogFragmentをコンテンツに合わせるにはどうすればよいですか?

のメソッドDialogFramentonCreateView

レイアウトは次のとおりです。

ありがとう、

0 投票する
1 に答える
2170 参照

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()ことですが、それはハックのようです。

編集: 問題を引き起こしているコードは次のとおりです。

0 投票する
3 に答える
2319 参照

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() で試しても成功しませんでした。
まだヌルポインター例外が発生しています...

0 投票する
3 に答える
7659 参照

android - Android: FragmentTransaction hide が DialogFragment に対して機能しない

追加しようとしています

FragmentTransactionに追加して、ユーザーが戻るボタンを押したときにダイアログが再表示されるようにしますが、機能していません。私は元々 DialogFragment で onCreateDialog をオーバーライドしましたが、 FragmentTransaction の非表示呼び出しのドキュメントに次のように記載されていることに気付きました。

これは、ビューがコンテナーに追加されたフラグメントにのみ関係します。

その代わりに、今は onCreateView をオーバーライドしています。今では隠れていますが、実際にはそうではありません。ダイアログはしぼむだけですが、ウィンドウはまだ暗いままです。それを取り除くには戻るボタンを押す必要がありますが、これは明らかに私が望んでいる動作ではありません。ここで何が欠けていますか?