onLongClick触发Linkify onClick

时间:2015-01-14 17:49:13

标签: android listener onlongclicklistener linkify

我正在聊天,我正在使用Linkify解析链接和onLongClick打开一个对话框,允许用户复制邮件内容。

chatText是我的TextView。

chatText.setText(message);
Linkify.addLinks(chatText, Linkify.ALL);
chatText.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
        final CharSequence[] items = {
                    "Copy"
            };

            AlertDialog.Builder builder = new AlertDialog.Builder(activity);
            builder.setTitle("Select Action");
            builder.setItems(items, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int item) {
                copyToClipboard();
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
            return true;   
     }
    });

对于普通邮件,它工作正常,问题是当我长按一下linkifyed消息时,它会打开对话框然后紧跟链接。 (例如打开浏览器) 当我回到应用程序时,表单仍然存在,并且复制到剪贴板的工作正常。

return true;
如果我没弄错的话,

应该阻止onClick。 我无法弄清楚如何阻止onClick我正在长时间点击。

2 个答案:

答案 0 :(得分:2)

这是我为这个案例写的一个小课:

public class NoLongClickMovementMethod extends LinkMovementMethod {

long longClickDelay = ViewConfiguration.getLongPressTimeout();
long startTime;

private static NoLongClickMovementMethod linkMovementMethod = new NoLongClickMovementMethod();

@Override
public boolean onTouchEvent(android.widget.TextView widget, android.text.Spannable buffer, MotionEvent event) {
    int action = event.getAction();

    if (action == MotionEvent.ACTION_DOWN) {
        startTime = System.currentTimeMillis();
    }

    if (action == MotionEvent.ACTION_UP) {
        long currentTime = System.currentTimeMillis();
        if (currentTime - startTime >= longClickDelay)
            return true;
    }
    return super.onTouchEvent(widget, buffer, event);
}

public static android.text.method.MovementMethod getInstance() {
    return linkMovementMethod;
}

用法:textView.setMovementMethod(NoLongClickMovementMethod.getInstance());

答案 1 :(得分:1)

如果有人遇到同样的问题,我发现这是一个已知的Android问题。 必须使用

    android:descendantFocusability="blocksDescendants"

为了避免链接的textview阻止其他事件。

此处报告了问题

https://code.google.com/p/android/issues/detail?id=3414