Android TextView NullPointerException 与 onTouchListener 和 onClickListener 4.0

2024-02-08

我有一个 TextView,我为它分配了 onTouchListener 和 onClickListener:

myTextView.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        _gestureDetector.onTouchEvent(event);
        return false;
    }
});

myTextView.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        // Show Toast Notification
    }
});

onTouchListener 将检测手势检测器的 onFling()。除了 Android 4.0(冰淇淋三明治)之外,此代码工作没有任何问题。在 4.0 中,我在“_gestureDetector.onTouchEvent(event);”上收到 NullPointerException (当我尝试投掷时)。

但是,如果我注释掉 onClickListener,则 fling 将起作用,并且我不会收到 NullPointerException。

我假设如果两个触摸监听器都返回 false,则该事件不会被消耗,从而允许两者都工作。

有人有什么想法吗?谢谢!

这是我的更多代码:

 /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.calendar);


    _gestureDetector = new GestureDetector(new GestureListener());

}

private class GestureListener extends SimpleOnGestureListener {
    @Override
    public boolean onDown(MotionEvent e) {
        return false;
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {

        if (e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE
                && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {
            // Bottom to top

            _calendarTableLayout.removeAllViews();

            int month = _calendar.get(Calendar.MONTH);

            _calendar.set(Calendar.MONTH, month + 1);
            _calendar.set(Calendar.DATE, 1); // important

            drawCalendar();

            return true;
        } else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE
                && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) {
            // Top to bottom

            _calendarTableLayout.removeAllViews();

            int month = _calendar.get(Calendar.MONTH);

            _calendar.set(Calendar.MONTH, month - 1);
            _calendar.set(Calendar.DATE, 1); // important

            redrawCalendar();

            return true;
        }

        return false;
    }

    @Override
    public void onLongPress(MotionEvent e) {
        // Do nothing
    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2,
            float distanceX, float distanceY) {
        // Do nothing
        return false;
    }

    @Override
    public void onShowPress(MotionEvent e) {
        // Do nothing
    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        // Do nothing
        return false;
    }
}

堆栈跟踪:

 01-27 11:12:16.406: E/AndroidRuntime(1448): FATAL EXCEPTION: main
 01-27 11:12:16.406: E/AndroidRuntime(1448): java.lang.NullPointerException
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at      android.view.GestureDetector.onTouchEvent(GestureDetector.java:587)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at      com.my.package.MyActivity$9.onTouch(MyActivity.java:287)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at      android.view.View.dispatchTouchEvent(View.java:5481)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at      android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at      android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at      android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at      android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at      android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1892)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1371)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at android.app.Activity.dispatchTouchEvent(Activity.java:2364)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at      com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:     1840)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at android.view.View.dispatchPointerEvent(View.java:5662)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:2863)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at android.os.Handler.dispatchMessage(Handler.java:99)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at android.os.Looper.loop(Looper.java:137)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at android.app.ActivityThread.main(ActivityThread.java:4340)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at java.lang.reflect.Method.invokeNative(Native Method)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at java.lang.reflect.Method.invoke(Method.java:511)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at      com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at      com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
 01-27 11:12:16.406: E/AndroidRuntime(1448):    at dalvik.system.NativeStart.main(Native Method)

我的朋友,当你从gestureDetector获取你想要处理的事件时,尝试返回true:

 public boolean onTouch(View v, MotionEvent event) {
     if (_gestureDetector.onTouchEvent(event)) {
         return true;
     }
     return false;
 }

否则,返回 false。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android TextView NullPointerException 与 onTouchListener 和 onClickListener 4.0 的相关文章

  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • okhttp 获取失败响应

    我已经在我的 android 客户端中实现了 okhttp 来进行网络调用 当我收到失败响应时 我会收到失败代码以及与该代码相关的文本作为消息 但我没有收到服务器发送给我的自定义失败响应 在我实施的代码中的失败响应中 我收到的消息只是 错误
  • Android 中如何通过彩信发送图片?

    我正在开发多媒体应用程序 我正在通过相机捕获一张图像 并希望将该图像和文本发送到其他号码 但我不知道如何通过彩信发送图像 MMS 只是一个 http post 请求 您应该使用执行请求额外的网络功能 final ConnectivityMa
  • WorkManager 或 AlarmManager 用于日常请求然后通知工作?

    这是用例 用户设置具有特定时间的每日通知 在指定时间 发出网络请求以获取一些数据 然后使用检索到的数据显示通知 我不确定是否应该使用 AlarmManager 还是 WorkManager 来实现这个用例 据我了解 AlarmManager
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • OnLongClickListener 不工作

    我有一个ImageView 我需要使用onLongClickListener对于图像视图 当我使用这段代码时 什么也没有发生 Code gallery Gallery findViewById R id gall1 gallery setA
  • 您使用什么物理 Android 设备进行测试?

    有什么好的推荐用于测试目的的物理 Android 设备吗 我正在苹果阵营寻找像 iPod touch 这样的设备 可以帮助 iOS 开发人员测试他们的东西 我知道有 Nexus One 但那东西相当昂贵 而且我并不真正关心手机的东西 而是可
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 上网本上可以进行Android开发吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想使用我的上网本进行 Android 开发 但是当我尝试使用 Eclipse 运行 SDK 时 没有加载任何内容 上网本对于 Android 开发来
  • 卡片视图 单击卡片移至新活动

    我是 Android 编程新手 正在研究卡片布局 我想知道如何使其可点击 android clickable true android foreground android attr selectableItemBackground 我的卡
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 我的应用程序中的后退按钮出现问题[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想在手机关闭时清除共享首选项值 你
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db
  • Android 后台倒计时器

    我有一个 Android 应用程序 它管理一个倒计时器 类 CountDownTimer 它显示在应用程序屏幕中 以显示到达 00 00 还剩多少时间 我现在的问题是 当我按主页按钮或启动另一个应用程序时 应用程序 计时器不会在后台运行 所
  • 发布的 Android apk 出现错误“包文件未正确签名”

    我最近将我的应用程序上传到 Android 市场 但是由于错误 下载时它拒绝运行 包文件未正确签名 我首先使用 eclipse 发布了数据包 右键单击导出 创建密钥库然后发布 但它拒绝工作 然后我下载了 keytool 和 jarsigne

随机推荐