我正在尝试在android 4+中使用内置的拖放功能。我为此目的创建了自定义TextView
public class DragSpotTextView extends TextView
textview拖动工作正常,但是当我在一些dragspot(也就是textview)上拖动视图时,它将异常视为;
01-17 16:16:29.178: E/AndroidRuntime(1193): FATAL EXCEPTION: main
01-17 16:16:29.178: E/AndroidRuntime(1193): java.lang.ClassCastException: java.lang.String cannot be cast to android.text.Spannable
01-17 16:16:29.178: E/AndroidRuntime(1193): at android.widget.TextView.onDragEvent(TextView.java:11223)
01-17 16:16:29.178: E/AndroidRuntime(1193): at android.view.View.dispatchDragEvent(View.java:13465)
01-17 16:16:29.178: E/AndroidRuntime(1193): at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1104)
01-17 16:16:29.178: E/AndroidRuntime(1193): at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1104)
01-17 16:16:29.178: E/AndroidRuntime(1193): at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1104)
01-17 16:16:29.178: E/AndroidRuntime(1193): at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1104)
01-17 16:16:29.178: E/AndroidRuntime(1193): at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1104)
01-17 16:16:29.178: E/AndroidRuntime(1193): at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1104)
01-17 16:16:29.178: E/AndroidRuntime(1193): at android.view.ViewRootImpl.handleDragEvent(ViewRootImpl.java:3471)
01-17 16:16:29.178: E/AndroidRuntime(1193): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2620)
01-17 16:16:29.178: E/AndroidRuntime(1193): at android.os.Handler.dispatchMessage(Handler.java:99)
01-17 16:16:29.178: E/AndroidRuntime(1193): at android.os.Looper.loop(Looper.java:137)
01-17 16:16:29.178: E/AndroidRuntime(1193): at android.app.ActivityThread.main(ActivityThread.java:4424)
01-17 16:16:29.178: E/AndroidRuntime(1193): at java.lang.reflect.Method.invokeNative(Native Method)
01-17 16:16:29.178: E/AndroidRuntime(1193): at java.lang.reflect.Method.invoke(Method.java:511)
01-17 16:16:29.178: E/AndroidRuntime(1193): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-17 16:16:29.178: E/AndroidRuntime(1193): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-17 16:16:29.178: E/AndroidRuntime(1193): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:5)
这是另一种需要它的人的解决方案。当我将项目拖动到处理拖动事件的TextView
时,我遇到了同样的问题。显然,导致问题的源代码行位于TextView.onDragEvent()
(以下代码中的第3个):
case DragEvent.ACTION_DRAG_LOCATION:
final int offset = getOffsetForPosition(event.getX(), event.getY());
Selection.setSelection((Spannable)mText, offset);
return true;
我的解决方法是在我的OnDragListener
TextView
中使用此类型的事件:
if (dragEvent.getAction() == DragEvent.ACTION_DRAG_LOCATION) return true;
这是Android中的一个错误,当然,这通常不会发生。
答案 1 :(得分:1)
我遇到了同样的问题。我通过创建自定义TextView
来修复它,并确保我自己使用DragEvent.ACTION_DRAG_LOCATION
事件并让父类处理其他Drag事件,如下所示:
public class CustomTextView extends TextView {
@Override
public boolean onDragEvent(DragEvent event) {
if(event.getAction() == DragEvent.ACTION_DRAG_LOCATION) {
return true;
} else {
return super.onDragEvent(event);
}
}
}
希望它有所帮助!
答案 2 :(得分:0)
之前我使用的是匿名内联类for dragListener。 现在我改变它并在类级别实现OnDragListener。这样我就解决了。
答案 3 :(得分:0)
我遇到了同样的问题。我阅读了this,然后尝试替换以下代码行:
ClipData data = ClipData.newPlainText("myLabel", "myString");
使用:
ClipData data = ClipData.newPlainText("myLabel", ((TextView) v).getText());
显然在onDragEvent方法中,第二个参数被强制转换为Spannable,它在使用String时抛出异常。
答案 4 :(得分:0)
对我来说,当我的不
我在这种情况下的解决方案是使用FrameLayout包装DropView TextView(我愿意打赌任何* Layout都可以工作) - 不是性能最优雅的解决方案,但不是最差的:)