5

我正在处理我的项目,其中有一个 listView,每个项目都是一个 LinaerLayout,它有一个带有 Linkify 超链接的 TextView。所以,当我在列表视图中按下一个项目时,它会打开一个对话框,这很好。当我按下 listView 中的链接文本时,它会打开一个对话框,这很好。问题:当我长按列表视图中的链接文本时,它会同时打开一个对话框和给定链接的一个活动!在这种情况下,我只希望它只打开对话框。换句话说,我想在长按上忽略 Linkify 的超链接。有谁知道我该怎么做?我不知道在哪里应用 LongPress 属性...在此先感谢。

仅供参考,我尝试了以下但不起作用。

public class URLSpanNoUnderline extends URLSpan implements OnLongClickListener {
    public URLSpanNoUnderline(String url) {
        super(url);
    }

    @Override
    public void updateDrawState(TextPaint textPaint) {
        super.updateDrawState(textPaint);

        textPaint.setUnderlineText(false);
    }

    @Override
    public void onClick(View v) {}

    @Override
    public boolean onLongClick(View v) {
        Log.d("log", "lonnnnnnnnnnnnnnnng click");
        return false;
    }
}
4

1 回答 1

6

你需要一个 longClick 标记,在 textview longclicklistener 中设置它,在 touchlistener 中,当 action 等于 MotionEvent.ACTION_UP 并且 longClick 为 true 时,返回 true。</p>

textview.setOnLongClickListener(new View.OnLongClickListener() {
    @Override 
    public boolean onLongClick(View v) {
        isLongClick= true;
        return false;
    }
});

textview.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_UP && isLongClick){
            isLongClick= false;
            return true;
        }
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            isLongClick= false;
        }
        return v.onTouchEvent(event);
    }
});

这个问题发生在某些手机上。

于 2013-11-05T03:59:20.293 回答