簡體   English   中英

Java / Android Studio相當於C#/ Xamarin'public event Action varName'

[英]Java/ Android Studio equivalent of C# / Xamarin 'public event Action varName'

我被要求將代碼從Xamarin移植到Android Studio(從C#移植到Java),而我在移植一些東西時卻很掙扎,其中包括“ public event Action varName1”及其實現到Java的移植。

Xamarin它們的用法如下:

public class class1: Java.Lang.Object{

public event Action varName1;
public event Action varName2;
...

//and they are called as 

varName1();
varName2();
//on the public void OnMove(MotionEvent motionEvent) method.

}

此外,它們用於

class2:Activity{
void initialization()
  {
        class1 listener = new class1();

    listener.varName1 += class3.Open;
    listener.varName2 += class3.Close;
...
}

因此,我假設每個對象都可以分解為兩個需求:一個事件和一個不帶參數的動作。 由於Action來自系統,據我所知,沒有直接端口,所以我想到了使用http://codingbytodesign.net/zh/2016/06/06/actiont-and- funct-tresult-in-java-8 /

我還閱讀了有關事件以及如何在Java中使用事件的信息,並發現這非常有幫助( https://scatteredcode.wordpress.com/2011/11/24/from-c-to-java-events/ ) ,但在嘗試同時解決這兩個問題時,我什至不知道從哪里開始。

我相信我可能會使事情變得過於復雜,所以我很樂意接受一些指導,或者如果有人可以通過示例來幫助我解決問題,我將不勝感激。

我不認為這是直接翻譯。 Java通常要做的是實現偵聽器接口,它們是簡單的回調。

因此,您的示例可以寫為:

public interface MyListener {
   public void action1();
   public void action2();
}

然后,您的類可以具有一個構造函數,該構造函數將此接口作為參數並在以后調用它:

public class ListenerConsumer {
    MyListener listener;
    ListenerConsumer (MyListener listener) {
        this.listener = listener;
    }

    public void doSomething() {
        this.listener.action1();
    }

    public void doSomethingElse() {
        this.listener.action2();
    }
}

然后,您可以在構造ListenerConsumer時匿名實現MyListener類,如下所示:

ListenerConsumer derp = new ListenerConsumer(new MyListener() {
    @Override
    public void action1() {
        Toast.makeText(getContext(), "Hello action1", Toast.LENGTH_LONG).show();
    }

    @Override
    public void action1() {
        Toast.makeText(getContext(), "Hello action2", Toast.LENGTH_LONG).show();
    }
});

要么

暫無
暫無

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

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