複数のアイテムを含むリスト フィールドがあります。リストから 1 つのアイテムを選択し、リスト内の別のアイテムにドラッグ アンド ドロップします。アイテムを別のアイテムにドロップした後、アイテムの位置を交換する必要があります。(例:- リストから 1 番目のアイテムを選択し、このアイテムをドロップ後にリストの 4 番目のアイテムにドラッグ アンド ドロップした場合、両方のアイテムのアイテムの位置を 1 番目のアイテムを 4 番目の位置に、4 番目のアイテムを 1 番目の位置に変更する必要があります)
これを行う方法がわかりません。このタスクを完了するのを手伝ってください。
public class ListScreen extends MainScreen implements ListFieldCallback {
// private ObjectChoiceField choices;
private int x, y;
int start = 0 , end=0;
private int startPos;
// private int pos;
private ObjectListField list;
private Object[] listData = new Object[] { "Ram", "Sunny", "Ramit",
"Vishal","Ravinder","Manoj","Ravi","Vikas","Santosh","Ravi","Deepak","Sharma","Nvn" };
public ListScreen() {
init();
}
private void init() {
list = new ObjectListField(FOCUSABLE);
list.setRowHeight(45);
list.setCallback(this);
list.set(listData);
add(list);
}
public void drawListRow(ListField listField, Graphics graphics, int index,
int y, int width) {
graphics.drawText(listData[index].toString(), 25, y + 10);
}
public Object get(ListField listField, int index) {
return listData[index];
}
public int getPreferredWidth(ListField listField) {
return getPreferredWidth();
}
public int indexOfList(ListField listField, String prefix, int start) {
// TODO Auto-generated method stub
return 0;
}
// protected boolean navigationMovement(int dx, int dy, int status, int
// time) {
//
// return super.navigationMovement(dx, dy, status, time);
// }
protected boolean touchEvent(TouchEvent message) {
int eventCode = message.getEvent();
// Get the screen coordinates of the touch event
int touchX = message.getX(1);
int touchY = message.getY(1);
if (eventCode == TouchEvent.CLICK) {
calculateStart(touchY);
// Dialog.alert("You clicked at (" + touchX + "," + touchY + ")");
}
if (eventCode == TouchEvent.MOVE) {
x = touchX;
y = touchY;
invalidate();
}
if (eventCode == TouchEvent.UNCLICK) {
int unClickx = message.getX(1);
int unClicky = message.getY(1);
System.out.println("unclick at:" + unClickx + "::::" + unClicky);
calculatePosition(unClicky);
}
return true;
}
private void calculatePosition(int dy) {
if (dy != 0) {
end = dy / 45;
System.out.println(start + ":::" + end);
Object temp = listData[start];
listData[start] = listData[end];
listData[end] = temp;
invalidate();
}
}
private void calculateStart(int dy){
if(dy!=0)
start = dy/45;
}
}