我在 Eclipse 中使用LWUIT运行带有j2me的S60 。
我正在使用此教程链接..以供参考绘制列表。
但是当我打印列表元素绘图的位置时,它不止一次调用(我认为是 3-4 次)我不明白为什么?
而且列表的响应能力也很差,向下滚动需要很多时间。
正如我看到的一些 LWUIT 列表的视频示例,它们工作得更快、更流畅,因为我的列表不知道为什么?
我的代码从收到的 json 解析和添加值到列表
public void setNotificationList(String response) {
if (!response.equals("") || response != null) {
try {
JSONObject jsonObject = new JSONObject(response);
if (jsonObject != null) {
if (jsonObject.getInt("total") > 0) {
totalNotificationPages = jsonObject
.getInt("total_pages");
JSONArray notificationJsonArray = jsonObject
.getJSONArray("notifications");
int lenghtOfList = notificationJsonArray.length();
if (!moreNotificationListFalg) {
notificationList = new List();
} else {
notificationVector.removeAllElements();
}
notificationVector = new Vector(lenghtOfList);
for (int i = 0; i < lenghtOfList; i++) {
JSONObject notificationJsonObjects = notificationJsonArray
.getJSONObject(i);
UpdatesUserData notificationData = new UpdatesUserData();
notificationData.user_id = JSONHelper
.getStringFromJSON(notificationJsonObjects,
"user_id");
notificationData._id = JSONHelper
.getStringFromJSON(notificationJsonObjects,
"id");
notificationData.message = JSONHelper
.getStringFromJSON(notificationJsonObjects,
"message");
notificationData.date = JSONHelper
.getStringFromJSON(notificationJsonObjects,
"created_at");
// Helper.stringToDate(JSONHelper.getStringFromJSON(notificationJsonObjects,
// "created_at"));
// Helper.createDate(JSONHelper.getStringFromJSON(notificationJsonObjects,
// "created_at"));
notificationData.distance = JSONHelper
.getStringFromParentJSON(
notificationJsonObjects, "user",
"distance");
if (notificationJsonObjects.has("user")) {
JSONObject jsonObjectParent = notificationJsonObjects
.getJSONObject("user");
notificationData.user_image = APIHelper
.getPictureUrl(
JSONHelper
.getStringFromParentJSON(
jsonObjectParent,
"profile",
"avatar_thumb"),
JSONHelper
.getStringFromParentJSON(
jsonObjectParent,
"profile",
"picture_url"));
}
System.out.println("User Image "
+ notificationData.user_image);
notificationVector.addElement(notificationData);
}// for loop ends
System.out.println("Displaying user Notification list");
// check if Update List Exists then remove it and Add
// this Notification List
if (form.contains(updateList)) {
form.removeComponent(updateList);
System.out.println(" Update List removed...");
}
if (form.contains(moreUpdates)) {
form.removeComponent(moreUpdates);
System.out.println(" moreUpdate removed... ");
}
// ----------------------------------------------------
// Getting index of lat element of List before adding
// new elements to it
int index = notificationList.size();
if (notificationVector.size() > 0) {
// Adding elements to notification vector
for (int i = 0; i < notificationVector.size(); i++) {
notificationList.addItem(notificationVector
.elementAt(i));
}
System.out.println("Adding List ");
if (!moreNotificationListFalg) {
notificationList
.setRenderer(new UpdatesListCellRenderer(
false));
form.addComponent(notificationList);
} else {
notificationList.setSelectedIndex(index - 1);
notificationList.repaint();
}
// Addgin more... Btn if pages are more than 1
if (totalNotificationPages > notificationPageNo)
form.addComponent(moreUpdates);
// Adding ActionListener to list
notificationList
.addActionListener(new ActionListener() {
public void actionPerformed(
ActionEvent arg0) {
form.setFocused(notificationTabBtn);
}
});
}
moreNotificationListFalg = false;// setting flag false
form.invalidate();
form.repaint();
} else {
System.out.println("List has not Elements to print.");
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
我的渲染器类
public class UpdatesListCellRenderer extends Container implements
ListCellRenderer {
private Label message = new Label("");
private Label distance = new Label("");
private Label profile_image = new Label("");
private Label date = new Label("");
private Label focus = new Label();
private Font font;
public Container base_container;
private Container containerY,containerX;
private Resources resources;
private boolean flag = false;
private Button moreUpdates = new Button();
public UpdatesListCellRenderer(boolean flag) {
try {
setCellRenderer(true);
this.flag = flag;
BorderLayout bl = new BorderLayout();
setLayout(bl);
base_container = new Container(new BoxLayout(BoxLayout.X_AXIS));
// cnt1.setWidth(width);
resources = Resources.open("/font.res");
font = resources.getFont("font1");
base_container.getStyle().setBgImage(
Image.createImage("/images/contact_list_background.png"));
profile_image.getStyle().setBgTransparency(0);
profile_image.setPreferredH(60);
profile_image.setPreferredW(70);
profile_image.getStyle().setAlignment(CENTER);
base_container.addComponent(profile_image);
containerY = new Container(new BoxLayout(BoxLayout.Y_AXIS));
// name.getStyle().setBgTransparency(0);
// name.getStyle().setFont(font);
message.getStyle().setBgTransparency(0);
message.getStyle().setFont(font);
containerX = new Container(new BoxLayout(BoxLayout.X_AXIS));
containerX.getStyle().setAlignment(BOTTOM);
containerX.getStyle().setMargin(25, 0, 0, 0);
distance.setAlignment(LEFT);
distance.setPreferredH(20);
distance.setPreferredW(85);
distance.getStyle().setBgImage(
Image.createImage("/images/long_right_arrow.png"));
distance.getStyle().setBgTransparency(0);
distance.getStyle().setFont(font);
date.setAlignment(RIGHT);
date.getStyle().setBgTransparency(0);
date.getStyle().setFont(font);
date.getStyle().setMargin(0, 0, 100, 1);
//moreUpdates.setVisible(false);
// containerY.addComponent(name);
containerY.addComponent(message);
containerX.addComponent(distance);
containerX.addComponent(date);
containerY.addComponent(containerX);
base_container.addComponent(containerY);
addComponent(BorderLayout.CENTER, base_container);
//addComponent(BorderLayout.SOUTH, moreUpdates);
focus.getStyle().setBgTransparency(100);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Component getListCellRendererComponent(List list, Object value,
int position, boolean isSelected) {
UpdatesUserData notificationData = (UpdatesUserData) value;
try {
//System.out.println(" List get ListComponent Popstion " + position + " List size " + list.size());
//if (!notificationData.message.equals(""))
message.setText("" + notificationData.message);
// else
// message.setText("");
//if (!notificationData.distance.equals(""))
distance.setText("" + notificationData.distance);
// else
// distance.setText("" + notificationData.distance);
date.setAlignment(RIGHT);
//if (!notificationData.date.equals(""))
date.setText("" + notificationData.date.substring(0, 10));
// else
// date.setText("");
date.setAlignment(RIGHT);
profile_image.setIcon(Helper.loadImage(notificationData.user_image));
// if( position == list.size()-1){
// //base_container.addComponent(moreUpdates);
// //addComponent(BorderLayout.SOUTH, moreUpdates);
// moreUpdates.setVisible(true);
// }
} catch (IOException e) {
e.printStackTrace();
}
if (isSelected) {
list.setFocus(true);
list.getStyle().setBgTransparency(100);
} else {
list.setFocus(false);
list.getStyle().setBgTransparency(0);
}
return this;
}
public Component getListFocusComponent(List list) {
return focus;
}
}
请帮我 ...