【发布时间】:2012-04-25 22:27:01
【问题描述】:
我有一个包含多个项目的列表字段。我想从列表中选择一项并拖放到列表中的另一项。将项目放在另一个项目上后,项目的位置应互换。 (示例:- 如果我从列表中选择第一项并将该项拖放到列表中的第四项 删除后两个项目的项目位置应更改为第 4 位置的第 1 项和第 1 位置的第 4 项)
我不知道该怎么做。请帮我完成这个任务。
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;
}
}
【问题讨论】:
-
你需要解释你的问题。并且标题与问题没有任何关系(如果存在则很难弄清楚关系)。
-
我认为在 BlackBerry 中完成这项任务是一项艰巨的任务。为此,我们可能需要使用一些
VerticalFieldManager管理器而不是自定义的ListField。并且识别出拖动动作后,我们需要进入动画模式,关于触摸移动(鼠标移动),我们需要在新位置从VerticalFieldManager绘制选定的项目。 -
鲁帕克我同意。但是我必须使用 ListField 或 ObjectChoiceField 来添加项目,因为我有多个项目。我将采用一个 VerticalFieldManager 并将该 ObjectListField 添加到该 VerticalFieldManager。您可以为此添加代码吗?
-
我之前没有实现那种UI Field。
-
我有一个代码。但是当项目超过屏幕时它只能在单个屏幕上工作,并且我滚动该字段之后它不能正常工作。检查此代码。
标签: blackberry listfield