this.Touch - 多次触发事件,不知道如何取消订阅

时间:2014-07-19 13:16:58

标签: android events xamarin.android unsubscribe

这个问题应该相当简单(我认为),但我不知道如何正确地做到这一点。我对编程还很陌生。

我有一个继承自EditText的简单类。有两个问题:

  1. 最初,Touch事件触发3次,第二次触摸将触发事件5次,依此类推。这是怎么回事?
  2. 我不知道如何取消订阅活动,或者在什么阶段取消订阅。通常,在处理活动时,我只是在OnResume期间订阅并在OnPause期间取消订阅。在这种情况下,什么是正确的解决方案?我应该编写自定义方法并从父类调用它吗?我应该实现IDisposable或类似的东西吗?我应该以不同的方式写课吗?
  3. 这是我的自定义编辑文本演示类:

        namespace HelloWorld_Android {
            class DemoEditText : EditText {
                public DemoEditText (Context context, IAttributeSet attrs) : base(context, attrs) {
                    this.Touch += HandleTouch;
                }
    
                void HandleTouch (object sender, TouchEventArgs e) {
                    Console.WriteLine ("Fired");
                }
            }
        }
    

    活动:

        namespace HelloWorld_Android {
            [Activity (Label = "HelloWorld_Android", MainLauncher = true)]
            public class MainActivity : Activity {
                protected override void OnCreate (Bundle bundle) {
                    base.OnCreate (bundle);
                    SetContentView(Resource.Layout.Main);
                }
            }
        }
    

    我的XML:

        <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
    
            <HelloWorld_Android.DemoEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/test"
             />
        </LinearLayout>
    

2 个答案:

答案 0 :(得分:1)

根据this documentationView.Touch用于触摸事件

我会询问调用你的处理程序的TouchEventArgs以查看它正在接收的具体手势。我至少会收到两个电话 - 一个用于触摸手势的开始和结束。

答案 1 :(得分:0)

此问题已修复,但未更改任何代码。我认为这是由于xamarin.android 4.12中的某种错误,截至目前我正在使用Xamarin.Android 4.12.6。我在WebConnectionStream.WriteRequestAsync(在4.12.6中已修复)中遇到了其他(无关)问题,也许出现了其他错误导致内存泄漏(不删除触摸委托)或其他问题,不确定。