2017-09-30 18 views
1

Web APIが記述されているJavaクラスから、アクティビティAで実装されたインタフェースメソッドを呼び出したいとします。Javaクラスのアクティビティで実装された呼び出しインタフェースメソッド

フローは、APIの成功した結果、今と呼ばれる活動Bに、個別のJavaクラスで書かれたAPI B活動から活動Aから移動するようなものであり、Iは、アクティビティAに実装されたインタフェースメソッドを呼び出したい

A - > B - > Javaクラス - >インタフェース()A

呼び出しインタフェースメソッドのJavaクラスでアクティビティAの参照を取得する際に問題が発生しています。私はフォローコードを試したが、何も働かなかった。この場合


Interface objInterface = (Interface) context; 
objInterface.funInterface(); 

Interface objInterface = (Interface) context; 
objInterface.funInterface(); 

Interface objInterface = (Interface) context.getApplicationContext(); 
objInterface.funInterface(); 

Interface objInterface = (Interface) new Activity_A; 
objInterface.funInterface(); 
+1

イベントバスはとてもシンプルです。インタフェースhttps://github.com/greenrobot/EventBus –

+0

を使用する必要はありません。理解していれば、JavaクラスでアクティビティAを実装しているインタフェースメソッドを呼び出したいですか?はいの場合は、コンテキストを渡してInterface A =(ActivityA)コンテキストを実行して、アクティビティAへの参照を取得できます。 –

+0

@ RaffaeleD'ArcoそのようなコンテキストはActivityBから渡され、それをActivityA – shehzy

答えて

2

私はあなたが何をしようとして説明してみましょう、あなたが苦労している理由かもしれないあなたが参照してくださいよ、あなたの時間をありがとうとヘルプcontextはアクティビティBからのものですが、これは間違っています。アクティビティBとアクティビティAはともにContextですが、同じではありませんContext


Interface objInterface = (Interface) context.getApplicationContext(); 
objInterface.funInterface(); 

ApplicationActivityと同じではありません。それは魔法のようにこれは間違いなく活動Aであり、それは実装を持っているん...しかし、それは既に存在したものとは異なるAである


Interface objInterface = (Interface) new Activity_A; 
objInterface.funInterface(); 

活動A.になることはできません。


アクティビティBは、あなたの独立したJavaクラスは、これはSeparation of Concernsと呼ばれる共通の設計原理であるアクティビティB.について知るべきではないアクティビティA.について知るべきではありません。私はあなたのJavaクラスからアクティビティBへのデータを最初に取得することに焦点を当てることをお勧めします。次に、そのデータを取得し、活動の間の通信の文書化の手段を使って活動Aに戻ってそれを送信します。最後にhttps://developer.android.com/training/basics/intents/result.html

、あなたはEventBusのような通信ライブラリを使用することができますが、あなたは誤解される可能性がありますようにあなたのコードを見ていると、それはそうですあなたがアンドロイドコンポーネントの範囲を理解するまで、私は "魔法のデータバス"に頼ることをお勧めしません。 :)

+0

偉大な答え+1。 – JoxTraex

+0

:)その詳細な説明のおかげでJon – shehzy

関連する問題