空の線形レイアウトの上に表示されるテキストビューがあります。たびに、私はドラッグ&ドロップして線図にテキストビューをドロップする必要があります。ユーザーがドロップを正常に完了しなかった場合、テキストビューがそこにまだ存在している場合に対処できるようにしたい。以下はTouchListenerのための私のコードです:AndroidドラッグアンドドロップTextViewが正しくドロップされないと失われる
private final class MyTouchListener implements OnTouchListener {
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(
view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
} else {
return false;
}
}
}
これはDragListener
class MyDragListener implements View.OnDragListener {
Drawable enterShape = getResources().getDrawable(
R.drawable.shape_droptarget);
Drawable normalShape = getResources().getDrawable(R.drawable.shape);
@Override
public boolean onDrag(View v, DragEvent event) {
int action = event.getAction();
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
// do nothing
break;
case DragEvent.ACTION_DRAG_ENTERED:
v.setBackgroundDrawable(enterShape);
break;
case DragEvent.ACTION_DRAG_EXITED:
v.setBackgroundDrawable(normalShape);
break;
case DragEvent.ACTION_DROP:
// Dropped, reassign View to ViewGroup
View view = (View) event.getLocalState();
ViewGroup owner = (ViewGroup) view.getParent();
owner.removeView(view);
LinearLayout container = (LinearLayout) v;
container.addView(view);
view.setVisibility(View.VISIBLE);
break;
case DragEvent.ACTION_DRAG_ENDED:
v.setBackgroundDrawable(normalShape);
default:
break;
}
return true;
}
}
線形レイアウトがプログラムによって生成され、それらのレイアウトに設定されたIDが単なる整数値である場合はどうなりますか?しかし、findViewByIdを使用してその整数値を使用しようとすると、IDEはエラーを出しています。 –
動的に追加されたIDを使用するためのソリューションがあります。スタックオーバフローで検索すると、間違いなく解決策が得られます。 – buzzingsilently
API 17&上記で 'View.generateViewId()'メソッドを使用すると、ビューのIDが自動的に割り当てられ、特定のビューが 'View.getChildAt(index)'メソッドを使用して検索されます – buzzingsilently