У меня есть поле списка с несколькими элементами. Я хочу выбрать один элемент из списка и перетащить его на другой элемент в списке. После сброса позиции на другой предмет позиция предметов должна быть заменена. (Пример: - если я выбираю 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;
}
}
Вам нужно объяснить свой вопрос. И название не имеет никакого отношения к вопросу (трудно выяснить отношение, если существует). – Rupak
Я редактировал мой Q Rupak. – cyberlinks
Я думаю, что это сложная задача в BlackBerry. Для этого нам может понадобиться использовать некоторый менеджер «VerticalFieldManager» вместо настраиваемого «ListField». И после определения действия перетаскивания нам нужно войти в режим анимации, а в отношении движения касания (движение мыши) нам нужно нарисовать выделенный элемент из «VerticalFieldManager» в новом положении. – Rupak