Java 没有虚拟方法startDragAndDrop
我正在学习教程,但遇到了这个错误。请帮忙 MainActivity.javaJava 没有虚拟方法startDragAndDrop,java,android,drag-and-drop,Java,Android,Drag And Drop,我正在学习教程,但遇到了这个错误。请帮忙 MainActivity.java @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.textView).setOnLongClickListener(longListe
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.textView).setOnLongClickListener(longListen);
findViewById(R.id.textView2).setOnLongClickListener(longListen);
findViewById(R.id.textView3).setOnLongClickListener(longListen);
}
View.OnLongClickListener longListen = new View.OnLongClickListener() {
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public boolean onLongClick(View v) {
DragShadow dragShadow = new DragShadow(v);
ClipData data = ClipData.newPlainText("", "");
v.startDragAndDrop(data,dragShadow,v,0);
return false;
}
};
private class DragShadow extends View.DragShadowBuilder{
ColorDrawable grayBox;
DragShadow(View view) {
super(view);
grayBox = new ColorDrawable(Color.LTGRAY);
}
@Override
public void onProvideShadowMetrics(Point outShadowSize, Point outShadowTouchPoint) {
super.onProvideShadowMetrics(outShadowSize,outShadowTouchPoint);
View v =getView();
int h = v.getHeight()/2;
int w = v.getWidth()/2;
grayBox.setBounds(0,0,w,h);
outShadowSize.set(w,h);
outShadowTouchPoint.set(w/2,h/2);
}
@Override
public void onDrawShadow(Canvas canvas) {
super.onDrawShadow(canvas);
grayBox.draw(canvas);
}
}
Main_Activity.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1"
android:orientation="vertical"
android:baselineAligned="false">
<TextView
android:text="Test 1"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:id="@+id/textView"
android:layout_gravity="center"
android:layout_weight="0.25" />
<TextView
android:text="Test2"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:id="@+id/textView2"
android:layout_gravity="center"
android:layout_weight="0.25" />
<TextView
android:text="Test3"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:id="@+id/textView3"
android:layout_gravity="center"
android:layout_weight="0.25" />
<TextView
android:text="Drop target"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:id="@+id/textView4"
android:layout_gravity="center"
android:layout_weight="0.25" />
基本上,我想创建一个拖放应用程序。这个过程是当单击textview并将其移动到拖放目标时,它会触发一些事情,例如更改背景颜色。但我仍然被这个问题困扰着。请帮忙。我真是个笨蛋。用
startDrag()
代替startdragandrop()
。它被标记为已弃用,但与startDragAndDrop()
不同,它可以工作。这可能与API版本有关。问题在于您试图利用的设备API的当前版本。StartDragAndDrop方法仅适用于API版本24或Nougat(android 7.0)以上版本。要解决此问题,您应添加:
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
v.startDragAndDrop(data,dragShadow,v,0);
} else {
v.startDrag(data,dragShadow,v,0);
}
对象视图没有startDragAndDrop方法,因此可以调用它。
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
v.startDragAndDrop(data,dragShadow,v,0);
} else {
v.startDrag(data,dragShadow,v,0);
}