gpt4 book ai didi

android - onLongClick 触发 Linkify onClick

转载 作者:搜寻专家 更新时间:2023-11-01 08:46:15 25 4
gpt4 key购买 nike

我正在聊天,我正在使用 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;
}
});

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

return true;

如果我没记错的话,应该会阻止 onClick。我不知道如何在我长按时阻止 onClick。

最佳答案

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

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());

关于android - onLongClick 触发 Linkify onClick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27949287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com