2014-07-19 29 views
1

这个问题应该相当简单(我认为),但我不知道如何正确地做到这一点。我对编程还很陌生。this.Touch - 事件触发多次,不知道如何取消订阅

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

  1. 最初,Touch事件触发3次,第二次触摸会触发事件5次,依此类推。这里发生了什么?
  2. 我不知道如何取消订阅活动,或者在什么阶段。通常,在处理活动时,我只需在OnResume中进行订阅并在OnPause期间取消订阅。在这种情况下什么是正确的解决方案?我应该编写一个自定义方法并从父类调用它吗?我应该实施IDisposable还是类似的?我应该以不同的方式写课程吗?

这是我的自定义编辑文本演示类:

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> 

回答

0

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

1

this documentationView.Touch是为触摸事件

我会询问TouchEventArgs您的处理程序被调用以查看它正在接收哪个特定的手势。至少我会期待它接收两个电话 - 触摸手势的开始和结束各一次。

+0

所以,我没有在这个项目上工作一段时间,并在两者之间安装了几个xamarin.android更新。今天,我又一次启动了这个项目,没有改变代码,触摸事件只触发两次(像你提到的那样),并且每次触摸都不会触发越来越多的事件。我不确定,但我认为这个问题是由于xamarin.android中已经修复的触摸事件引起的。 –