5

Android 4以降で組み込みのドラッグアンドドロップ機能を使用しようとしています。この目的のために、カスタム TextView を次のように作成しました。

public class DragSpotTextView extends 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)
4

5 に答える 5

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;

私にとっての修正は、このタイプのイベントを my OnDragListenerfor thisで消費することでしたTextView:

 if (dragEvent.getAction() == DragEvent.ACTION_DRAG_LOCATION) return true;

もちろん、これは Android のバグであり、通常は発生しないはずです。

于 2013-10-18T23:04:05.740 に答える
1

私も同じ問題を抱えていました。カスタムを作成し、自分でイベントTextViewを消費し、親クラスが他の Drag イベントを処理できるようにすることで、次のように修正しました。DragEvent.ACTION_DRAG_LOCATION

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

}

それが役に立てば幸い!

于 2014-08-26T13:11:47.817 に答える
0

以前、dragListenerに匿名のインラインクラスを使用していました。今、私はそれを変更し、クラスレベルでOnDragListenerを実装しました。このようにして私はそれを解決しました。

于 2013-01-18T05:34:09.547 に答える
0

私の場合、TextView ではないドラッグ シャドウTextView であるドロップ ゾーンに入ると、アプリがクラッシュしました。

この場合の私の解決策は、ドロップ TextView を FrameLayout でラップすることでした (任意の *Layout が機能することを確信しています) - パフォーマンスに関して最もエレガントなソリューションではありませんが、最悪でもありません:)

于 2013-05-21T04:27:42.460 に答える