【问题标题】:this.Touch - Event firing multiple times, don't know how to unsubscribethis.Touch - 多次触发事件,不知道如何取消订阅
【发布时间】:2014-09-10 12:36:50
【问题描述】:

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

我有一个继承自 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>

【问题讨论】:

    标签: android events xamarin.android unsubscribe


    【解决方案1】:

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

    我会询问你的处理程序被调用的TouchEventArgs,以查看它接收到的具体手势。至少我希望它会收到两个呼叫 - 一个用于触摸手势的开始和结束。

    【讨论】:

    • 所以,我已经有一段时间没有从事这个项目了,并且在这之间安装了几个 xamarin.android 更新。今天,我再次启动了该项目,没有更改任何代码,并且触摸事件仅触发了两次(就像您提到的那样),并且每次新触摸都不会触发越来越多的次数。我不确定,但我认为这个问题是由于 xamarin.android 中的触摸事件错误已修复。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多