0

サポート ライブラリの実装を使用して、プログラムでフラグメントをインスタンス化する際に問題が発生しています。私が実行しようとしているタスクと、まだ実を結んでいないいくつかの試みの簡単な説明を次に示します。

アプリケーションの UI は、ユーザーの好みに合わせて変更される可能性があります。これを行うために、異なるレイアウトごとに Fragment を使用し、ユーザーの指示に従って、特定の時間に UI でアクティブな Fragment を置き換えています。これを行うために私が試みた(そして失敗した)いくつかの方法を次に示します。

  • フラグメントを非静的内部クラスとしてアクティビティに追加しようとしました。このアプローチは、ユーザーがデバイスを回転させない限り機能しました。ユーザーがデバイスを回転させるとすぐに、アプリケーションがクラッシュしました (これは、ポートレート -> ランドスケープの回転Landscape -> Portrait rotation). :

  • フラグメントを静的内部クラスとして実装します。Fragment が開始されると、そのレイアウトが展開され、Activity の制御フローの後半から、Fragment のサブビューに対して何かを行うことができます (特に、リスナーをボタンに追加します)。残念ながら、 を使用してフラグメントのサブビューを参照できなかったため、これは機能しませんでした[frag_name].getView().findViewById()。非静的コンテキストで静的オブジェクトを参照することについての何か。もう一度、SOを確認したところ、次のことがわかりました。

  • Fragment をアクティビティとは別のクラスとして実装します。これは、developer.android.com の Dev ドキュメントが推奨しているようです。これを行うと、すべてが正常にコンパイルされるように見えますが、フラグメントのサブビューを参照しようとすると (もう一度、を使用して[frag_name].getView().findViewById())NullPointerExceptionが発生します。コード全体に System.out.println() ステートメントを追加して、正確に何を見つけるかを確認すると)が起こっていますが、フラグメントの onCreateView 内の print ステートメントが起動されないことがわかりました。これは、onCreateView がトリガーされないことを意味します。

だから今、私は立ち往生しています。私は何を間違っていますか?これを正確に実装することは、経験から何かを学ぶことほど重要ではないので、Android の開発を上達させることができます。したがって、別のクラスが静的クラスよりも優れている場合、またはその逆の場合は、どちらを使用してもかまいません。

ありがとう。

4

1 に答える 1

0

理解した。私が望んでいたことを行うには、アクティビティをリスナーとして各フラグメントに登録し、2 つの間で「ボタンを有効にする準備ができました」というメッセージをやり取りする必要がありました。さらなる研究のためにこの質問を使用している人には、その方法に関するガイドが Android 開発者ガイドにあります

于 2012-09-08T07:58:59.690 に答える