IPhoneからAndroidに切り替えて、iPhone SDKのどこに似たものを探していますか。クラスが特定のタスクを完了すると、デリゲートとして設定されたオブジェクトのデリゲートメソッドを呼び出します。
あまり詳細は必要ありません。ドキュメントを調べても何も見つかりませんでした(最も近いのは、iOS通知のように見える「ブロードキャストインテント」でした)。
誰かが私に正しいドキュメントを教えてもらえたとしても、それは素晴らしいことです。
ありがとう!
気にしないでください...ここで答えを見つけました:)
http://www.javaworld.com/javaworld/javatips/jw-javatip10.html
記事を保存するために記事から貼り付ける:
MS-WindowsおよびXWindow Systemのイベント駆動型プログラミングモデルに精通している開発者は、何かが発生したときに呼び出される(つまり、「コールバック」される)関数ポインタを渡すことに慣れています。 Javaのオブジェクト指向モデルは現在、メソッドポインターをサポートしていないため、この快適なメカニズムを使用できないようです。しかし、すべてが失われるわけではありません!
Javaのインターフェースのサポートは、コールバックと同等のものを取得できるメカニズムを提供します。秘訣は、呼び出したいメソッドを宣言する単純なインターフェースを定義することです。
たとえば、イベントが発生したときに通知を受け取りたいとします。インターフェイスを定義できます。
public interface InterestingEvent
{
// This is just a regular method so it can return something or
// take arguments if you like.
public void interestingEvent ();
}
これにより、インターフェイスを実装するクラスのオブジェクトを把握できます。したがって、他の無関係な型情報を気にする必要はありません。これは、MotifでC++コードを使用するときに、ウィジェットのデータフィールドを使用してオブジェクトポインターを保持するトランポリンC関数をハッキングするよりもはるかに優れています。
イベントを通知するクラスは、InterestingEventインターフェイスを実装するオブジェクトを予期してから、interestingEvent()を呼び出す必要があります。 必要に応じてメソッド。
public class EventNotifier
{
private InterestingEvent ie;
private boolean somethingHappened;
public EventNotifier (InterestingEvent event)
{
// Save the event object for later use.
ie = event;
// Nothing to report yet.
somethingHappened = false;
}
//...
public void doWork ()
{
// Check the predicate, which is set elsewhere.
if (somethingHappened)
{
// Signal the even by invoking the interface's method.
ie.interestingEvent ();
}
//...
}
// ...
}
その例では、somethingHappened述語を使用して、イベントをトリガーする必要があるかどうかを追跡しました。多くの場合、メソッドが呼び出されたという事実は、interestingEvent()のシグナリングを保証するのに十分です。
イベント通知の受信を希望するコードは、InterestingEventインターフェイスを実装し、それ自体への参照をイベント通知機能に渡す必要があります。
public class CallMe implements InterestingEvent
{
private EventNotifier en;
public CallMe ()
{
// Create the event notifier and pass ourself to it.
en = new EventNotifier (this);
}
// Define the actual handler for the event.
public void interestingEvent ()
{
// Wow! Something really interesting must have occurred!
// Do something...
}
//...
}
これですべてです。この単純なJavaイディオムを使用すると、Javaへの移行が少し不安定になることを願っています。
コトリンのペンダント。
インターフェイスを定義します。私の例では、外部ライブラリを使用してクレジットカードをスキャンします。
_interface ScanIOInterface {
fun onScannedCreditCard(creditCard: CreditCard)
}
_
Activity
/Fragment
を登録できるクラスを作成します。
_class ScanIOScanner {
var scannerInterface: ScanIOInterface? = null
fun startScanningCreditCard() {
val creditCard = Library.whichScanCreditCard() //returns CreditCard model
scannerInterface?.onScannedCreditCard(creditCard)
}
}
_
Activity
/Fragment
にインターフェースを実装します。
_class YourClassActivity extends AppCompatActivity, ScanIOInterface {
//called when credit card was scanned
override fun onScannedCreditCard(creditCard: CreditCard) {
//do stuff with the credit card information
}
//call scanIOScanner to register your interface
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val scanIOScanner = ScanIOScanner()
scanIOScanner.scannerInterface = this
}
}
_
CreditCard
はモデルであり、好きなように定義できます。私の場合、ブランド、数字、有効期限が含まれています...
その後、どこでもscanIOScanner.startScanningCreditCard()
を呼び出すことができます。
このビデオチュートリアル の主な内容は、インターフェイスを使用して、さまざまなフラグメントやアクティビティ間でメソッド/データ交換を委任する方法を示すことですが、Java forAndroid。
Javaコールバックは、iOSデリゲートと同じものではありません。iOSでは、Androidとほぼ同じ方法でコールバックを使用できます。 Androidには、iOSデリゲートが使用されているタスクの実装に役立つstartActivityForResult
があります。
ListAdapter
はAndroidの委任パターンの例だと思います。