如何从 RecyclerView 项中复制文本?

Posted

技术标签:

【中文标题】如何从 RecyclerView 项中复制文本?【英文标题】:How to copy text from the RecyclerView item? 【发布时间】:2020-09-22 00:09:01 【问题描述】:

我想在RecyclerView 项目中添加一个副本Button 并复制文本,我添加了一个用于从RecyclerView 复制文本的代码,但它不起作用。单击副本Button 后,应用程序崩溃。这是我复制文本的代码。

ClipboardManager clipboard = (ClipboardManager)holder.itemView.getContext().getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText(Intent.EXTRA_TEXT, model.getShaData());
clipboard.setPrimaryClip(clip);

Toast.makeText(holder.itemView.getContext(), "Shayari Copied", Toast.LENGTH_SHORT).show();

我的 LOGCAT

E/androidRuntime: FATAL EXCEPTION: main
    Process: app.indian.desishayari, PID: 346
    java.lang.SecurityException: app.my.quotes from uid 10830 not allowed to perform READ_CLIPBOARD
        at android.os.Parcel.createException(Parcel.java:1966)
        at android.os.Parcel.readException(Parcel.java:1934)
        at android.os.Parcel.readException(Parcel.java:1884)
        at android.content.IClipboard$Stub$Proxy.setPrimaryClip(IClipboard.java:184)
        at android.content.ClipboardManager.setPrimaryClip(ClipboardManager.java:104)
        at app.indian.desishayari.ShayariAdapter$1.onClick(ShayariAdapter.java:50)
        at android.view.View.performClick(View.java:6740)
        at android.view.View.performClickInternal(View.java:6703)
        at android.view.View.access$3400(View.java:803)
        at android.view.View$PerformClick.run(View.java:26373)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:232)
        at android.app.ActivityThread.main(ActivityThread.java:7172)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:888)
     Caused by: android.os.RemoteException: Remote stack trace:
        at android.app.AppOpsManager.noteOp(AppOpsManager.java:2411)
        at com.android.server.clipboard.ClipboardService.clipboardAccessAllowed(ClipboardService.java:653)
        at com.android.server.clipboard.ClipboardService.setPrimaryClipInternal(ClipboardService.java:488)
        at com.android.server.clipboard.ClipboardService.setPrimaryClipInternal(ClipboardService.java:423)
        at com.android.server.clipboard.ClipboardService$ClipboardImpl.setPrimaryClip(ClipboardService.java:267)

如何解决这个问题?请任何人帮助...

【问题讨论】:

您在java.lang.SecurityException: app.my.quotes from uid 10830 not allowed to perform READ_CLIPBOARD面临的错误消息中有什么不清楚的地方? @KishanNath,可能是Context 相关问题。你试过Activity/FragmentContext吗? 任何人都可以解释我该怎么做,我是android studio和java的新手 【参考方案1】:

你的复制代码是错误的,使用我认为有效的代码。我在你点击项目时举例。

    itemView.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View view) 
            ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
            ClipData clip = ClipData.newPlainText("label", holder.yourTextView.getText().tostring());
            if (clipboard == null || clip == null) return;
            clipboard.setPrimaryClip(clip);
        
    );

【讨论】:

感谢您的响应,但这在我的项目中也不起作用,但我找到了解决方案... try ClipboardManager manager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) ClipData data = ClipData.newPlainText("data", shayari.getGetShayari()); manager.setPrimaryClip(data); else manager.setText(shayari.getGetShayari()); catch (Exception e) 哦,是的,您正在检查应用程序中的 android 版本。好像在honeyComb版本以下就不行了

以上是关于如何从 RecyclerView 项中复制文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何从RecyclerView项中获取Value

从recyclerview项目中保存模型类中选定的RadioButton文本

RecyclerView 项中的背景选择器

如何从 recyclerview 和 sqlite 中删除项目? [复制]

从列表框项中获取文本

Recyclerview:如何将一些帖子与图像和没有图像混合? [复制]