【问题标题】:Exception while copying text from edittext to clipboard via context menus?通过上下文菜单将文本从edittext复制到剪贴板时出现异常?
【发布时间】:2012-04-28 09:35:10
【问题描述】:

我在尝试将 TextView 文本复制到剪贴板时是否做错了什么?

我的活动类中的代码:

@Override
public boolean onContextItemSelected(MenuItem item) {
    String selectedItem = item.getTitle().toString().trim();
    try {
    ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    ClipData clip;
    if (selectedItem.equals("Copy Query")) {
        clip = ClipData.newPlainText("Query",tv1.getText());
    clipboard.setPrimaryClip(clip);
    }           
    return true;
}

错误:

04-17 03:10:54.056: E/AndroidRuntime(503): FATAL EXCEPTION: main
04-17 03:10:54.056: E/AndroidRuntime(503): java.lang.NoClassDefFoundError: android.content.ClipboardManager
04-17 03:10:54.056: E/AndroidRuntime(503):  at com.ewe.radixcalculator.CalculatorActivity.onContextItemSelected(CalculatorActivity.java:68)
04-17 03:10:54.056: E/AndroidRuntime(503):  at android.app.Activity.onMenuItemSelected(Activity.java:2199)
04-17 03:10:54.056: E/AndroidRuntime(503):  at com.android.internal.policy.impl.PhoneWindow$ContextMenuCallback.onMenuItemSelected(PhoneWindow.java:2744)
04-17 03:10:54.056: E/AndroidRuntime(503):  at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143)
04-17 03:10:54.056: E/AndroidRuntime(503):  at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855)
04-17 03:10:54.056: E/AndroidRuntime(503):  at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:137)
04-17 03:10:54.056: E/AndroidRuntime(503):  at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:874)
04-17 03:10:54.056: E/AndroidRuntime(503):  at android.widget.AdapterView.performItemClick(AdapterView.java:284)
04-17 03:10:54.056: E/AndroidRuntime(503):  at android.widget.ListView.performItemClick(ListView.java:3382)
04-17 03:10:54.056: E/AndroidRuntime(503):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696)
04-17 03:10:54.056: E/AndroidRuntime(503):  at android.os.Handler.handleCallback(Handler.java:587)
04-17 03:10:54.056: E/AndroidRuntime(503):  at android.os.Handler.dispatchMessage(Handler.java:92)
04-17 03:10:54.056: E/AndroidRuntime(503):  at android.os.Looper.loop(Looper.java:123)
04-17 03:10:54.056: E/AndroidRuntime(503):  at android.app.ActivityThread.main(ActivityThread.java:4627)
04-17 03:10:54.056: E/AndroidRuntime(503):  at java.lang.reflect.Method.invokeNative(Native Method)
04-17 03:10:54.056: E/AndroidRuntime(503):  at java.lang.reflect.Method.invoke(Method.java:521)
04-17 03:10:54.056: E/AndroidRuntime(503):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-17 03:10:54.056: E/AndroidRuntime(503):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-17 03:10:54.056: E/AndroidRuntime(503):  at dalvik.system.NativeStart.main(Native Method)
04-17 03:10:54.056: E/AndroidRuntime(503): Caused by: java.lang.ClassNotFoundException: android.content.ClipboardManager in loader dalvik.system.PathClassLoader[/data/app/com.ewe.radixcalculator-2.apk]
04-17 03:10:54.056: E/AndroidRuntime(503):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
04-17 03:10:54.056: E/AndroidRuntime(503):  at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
04-17 03:10:54.056: E/AndroidRuntime(503):  at java.lang.ClassLoader.loadClass(ClassLoader.java:532)

【问题讨论】:

  • 我在 Android 2.2 模拟器和我的 Android 2.2 设备上收到此错误。
  • 我认为 ClipboardManager 从 API 级别 11 开始......
  • 请参阅stackoverflow.com/a/11012443/2116185,了解在不同 Android API 版本上获取 ClipboardManager 对象的正确方法。

标签: android copy textview contextmenu clipboard


【解决方案1】:

从您的堆栈跟踪中,很明显没有找到您正在使用的ClipboardManager。快速查找显示,Android 中有两个 ClipboardManager

  1. ClipboardManager (android.text.ClipboardManager) 自 API 1 起
  2. ClipboardManager (android.content.ClipboardManager) 自 API 11 起

根据您的实现,我猜您打算使用仅包含在 API 11 中的后者。因此,您的代码会导致错误。

Eclipse 不会向您显示错误,因为您在导入部分中导入了android.text.ClipboardManager

要解决问题,请导入正确的包并指向相关的 API 版本。

如果您想在旧版本中使用android.text.ClipboardManager,我认为应该没问题。这是我将如何做到的。希望这可以帮助。

@Override
public boolean onContextItemSelected(MenuItem item) {
    String selectedItem = item.getTitle().toString().trim();
    try {
    ClipboardManager clipboard = new ClipboardManager();
    if (selectedItem.equals("Copy Query")) {
        clipboard.setText(tv1.getText().toString());
    }           
    return true;
}

【讨论】:

    猜你喜欢
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多