You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebView上层ListView显示隐藏切换异常:显示后即刻消失

问题解决:WebView点击切换ListView显示/隐藏时闪显后立即消失

你的问题出在OnTouchListener的逻辑上——触摸事件包含ACTION_DOWN、ACTION_MOVE、ACTION_UP等多个阶段,当前代码会在每个阶段都执行一次ListView的显示/隐藏切换,导致按下时切换一次,抬起时又切换回去,看起来就是闪一下就消失。

修复方案

只在触摸动作结束(ACTION_UP)时执行切换逻辑,同时确保事件处理符合预期:

private void playYoutube(String lnk) {
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        webView.getSettings().setMediaPlaybackRequiresUserGesture(false);
    }
    webView.loadUrl(lnk);
    webView.setWebViewClient(new WebViewClient() {
        public void onPageFinished(WebView view, String url) {
            webView.loadUrl("javascript:(function() { document.getElementsByClassName('ytp-large-play-button ytp-button')[0].click(); })()");
        }
    });
    webView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // 只在触摸抬起时执行切换
            if (event.getAction() == MotionEvent.ACTION_UP) {
                if (listView.isShown()) {
                    listView.setVisibility(View.GONE);
                } else {
                    listView.setVisibility(View.VISIBLE);
                }
            }
            // 返回false,让WebView继续处理自身触摸事件(比如视频播放控制)
            return false;
        }
    });
}

关键修改点

  • 增加event.getAction() == MotionEvent.ACTION_UP判断,确保只在用户完成点击动作时触发切换
  • 将return true改为return false,这样WebView还能处理自身的触摸事件(比如视频的暂停/播放、进度拖动等);如果不需要WebView处理自身触摸,也可以保持return true,但必须只在ACTION_UP时执行切换

内容的提问来源于stack exchange,提问作者jiija

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:55:16