gpt4 book ai didi

android - ClipboardManager OnPrimaryClipChangedListener 为每个副本调用两次

转载 作者:太空宇宙 更新时间:2023-11-03 11:33:27 30 4
gpt4 key购买 nike

当我将文本复制到剪贴板时,onPrimaryClipChanged 方法被调用了两次。有什么想法吗?

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
final ClipboardManager cliboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);

cliboardManager
.addPrimaryClipChangedListener(new OnPrimaryClipChangedListener() {

@Override
public void onPrimaryClipChanged() {
ClipData clipData = cliboardManager.getPrimaryClip();
System.out
.println("********** clip changed, clipData: "
+ clipData.getItemAt(0));
}
});
return true;
}

测试用例:从 BBC 网站复制文本“继续”将导致以下输出:

continue

continue

但是如果我调试程序,我可以看到 clipData 对象有值:

ClipData { text/plain {T:continue } }

第一次调用 onPrimaryClipChanged() 和

ClipData { text/plain "BBC - Homepage" {T:continue } }

下次调用 onPrimaryClipChanged() 时。

所以基本上第一次 ClipDescription 是 { text/plain } 第二次是 ClipDescription { text/plain "BBC - Homepage"}(即包括网页标题)

最佳答案

我假设你没有注册多个监听器,我不能说这是错误,你仍然可以解决它。尝试这样的事情:

   String mPreviousText = "";

cliboardManager
.addPrimaryClipChangedListener(new OnPrimaryClipChangedListener() {

@Override
public void onPrimaryClipChanged() {
ClipData clipData = cliboardManager.getPrimaryClip();
System.out
.println("********** clip changed, clipData: "
+ clipData.getItemAt(0));
ClipData.Item item = clipData.getItemAt(0);
if(mPreviousText.equals(item.getText().toString())) return;
else{
/// do something
mPrevousText = item.getText().toString();
}
}
});

关于android - ClipboardManager OnPrimaryClipChangedListener 为每个副本调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18391701/

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