簡體   English   中英

匿名函數內部的回調,無法正確獲取語法

[英]Callback inside anonymous functions, not getting the syntax propely

我正在嘗試在一個匿名類中實現一個void方法回調,由於在大型android代碼庫上工作,我對語法有點迷失。 我已經設置了一個監聽器和圖像按鈕,如下所示:

MyImageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        OnFollowingClick click;
        click = new OnMyClick(param1, param2);  // irrelevant for this thread
        click.onClick(view);    // irrelevant for this thread

        // my problem is here!
        click.setCallback( what do I pass in here? and where can define my callback?);
    }
});

這是我定義的OnMyClick類和void回調接口:

public interface CallbackInterface {
    public void Callback();
}

public class OnMyClick implements View.OnClickListener {
    // I added this
    CallbackInterface mCallBack;
    public void setCallback(CallbackInterface callback) {
        this.mCallBack = callback;
    }
    // Please call my callback
    public void onFollowingChanged() {
        if (mCallBack != null) {
            mCallBack.Callback();
        }
    }
    // a bunch of code in here that does not matter
    // ...

我必須在某個地方創建回調,所以我猜我需要這樣的東西:

public class SomeClass implements CallbackInterface {

    @Override
    public void Callback() {
        System.out.println("Hey, you called.");
    }
}

問題在於偵聽器是一個匿名函數,因此我不想在某個地方定義一個單獨的類僅用作回調。

我看着這個線程,但沒有給我太多信息:

匿名類如何使用“擴展”或“實現”?

有沒有一種方法可以使匿名函數在范圍內實現我的接口,例如:

MyImageView.setOnClickListener(new View.OnClickListener() {

    @Override
    public void Callback() {
        // please call me!
    }

不確定是否有意義,非常感謝購買任何幫助。

謝謝!

就像您已經使用View.OnClickListener一樣,只需匿名定義回調View.OnClickListener

MyImageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        OnFollowingClick click;
        click = new OnMyClick(param1, param2);  // irrelevant for this thread
        click.onClick(view);    // irrelevant for this thread

        // your solution is here!
        click.setCallback(new CallbackInterface() {
            @Override
            public void Callback() {
                System.out.println("Hey, you called.");
            }
        });
    }
});

如果這不是您的意思,請澄清一下,我會盡力幫助您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM