[英]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.