9

Windows モバイルから Android へのアプリケーションの移植に取り組んでいますが、少し問題が発生しました。既存のアプリケーションは MVP パターンを使用し、ポートで再利用される個別の「プレゼンター」クラスを持っています (非常に広範なアプリケーションであり、書き直すことは不可能であり、C# コードはすべて mono for android を使用して再利用されています)。 )。これらは、インターフェイスを実装するビューを取得します。Android では、適切なインターフェイスを実装するアクティビティを作成し、プレゼンターをインスタンス化し、自分自身を引数として渡すことで実現しました。これはすべて、私たちの目的には問題なく機能しているように見えます。または、アイスクリーム サンドイッチが登場し、フラグメントを使用して実装しようとするまではそうでした。

かなりの数のアクティビティがタブを利用しており、アクション バーやその他の新機能を使用するために、ビューページャーを使用してタブ付きのアクティビティをタブ付きのフラグメントに変換しようとしていますが、ここで問題が発生しています。私が読んだことから、各タブをフラグメントとして実装することが推奨される方法のようですが、プレゼンターがアクティビティを通じてフラグメントと通信できるようにする方法について混乱しています。現時点では、プレゼンターはアクティビティのインターフェイス メソッドを呼び出し、スピナーやテキストビューなどに直接アクセスして、必要に応じて値を取得および設定します。これらの ui 要素のそれぞれがアクティビティで宣言されているため、これは簡単です。これらの ui 要素をすべてフラグメントに移動すると、そうはなりません。各アクティビティとフラグメントの間にまったく新しい一連のインターフェイスを実装しなくても、それらにアクセスできるようには見えません。フラグメント内の ui 要素への参照をアクティビティで生成しようとしましたが (フラグメント ルート ビューを取得し、その中で必要なビューを見つけることによって)、ビューページャーは常にフラグメントをロードするとは限らないため、これは機能しません。それらをロードした場合でも、アクティビティが実行中の状態になるまでレイアウトは膨張しないため、常に null 値が返されます。

ちょっと変わった質問だとは思いますが、別のフラグメント タブに保存されている UI 要素とプレゼンター クラスがやり取りできるようにするにはどうすればよいでしょうか? 私は完全に間違った方法で行っているに違いないと感じていますが、どのように行うべきかわかりません.

4

1 に答える 1