黑莓 - 具有不同ID的可点击ListView

时间:2013-05-28 09:55:44

标签: blackberry

我在listview中遇到导航点击的一些问题。当我在for循环中添加add(myListView);时,这个循环一次又一次地在屏幕上添加记录,例如第一次添加第一条记录,第二次再次添加第一条记录和第二条记录。以下是代码:

for(int i=0;  i < totalfriends; i++){
    imagearr = object.getJSONArray("pic_user_pro");
    imgname = imagearr.getString(i);

    if (imgname == "" || imgname == "null")
    {
        listThumb = getImage.getImageFromUrl("http://ugo.offroadstudios.com/wp-content/uploads/null.png"+connParams+"");
        bmpResized = GPATools.ResizeTransparentBitmap(listThumb, 80, 80,
        Bitmap.FILTER_LANCZOS, Bitmap.SCALE_TO_FIT);
    }
    else
    {
        listThumb = getImage.getImageFromUrl("http://ugo.offroadstudios.com/wp-content/uploads/"+imgname+""+connParams+"");
        bmpResized = GPATools.ResizeTransparentBitmap(listThumb, 80, 80,
        Bitmap.FILTER_LANCZOS, Bitmap.SCALE_TO_FIT);
    }
    listTitlearr = object.getJSONArray("nick_name");
    listTitle = listTitlearr.getString(i);
    friendidarr = object.getJSONArray("friends_user_id");
    friendid = friendidarr.getString(i);
    listDescarr = object.getJSONArray("interest");
    listDesc = listDescarr.getString(i);
    listDesc2arr = object.getJSONArray("location");
    listDesc2 = listDesc2arr.getString(i);

    v.addElement(new ListRander(bmpResized,listTitle ,listDesc,listDesc2, navBar));
    // CustomListField With Event
    final String nextGiftsId = friendid;
    myListView = new CustomListField(v){
        public boolean trackwheelClick(int status, int time)
        {
            UiApplication.getUiApplication().pushScreen(new ViewMoreHotlist(nextGiftsId));
            return true;
        }
    };
    add(myListView);
}// For Loop End

如果我在for循环之外添加ListView并在for循环外添加add(myListView);,此循环会在屏幕上正确添加记录,但如果我点击第一条记录,则每次都会获得最后一条记录的ID

我希望屏幕上的所有记录显示都正确,当我点击任何记录时,它会记录该记录的ID而不是其他记录。

1 个答案:

答案 0 :(得分:2)

您不想添加多个列表。您希望一个列表包含多个。 JSON数据中的每条记录都应该是列表中的一行。

所以,你应该保留这段代码

myListView = new CustomListField(v){
    public boolean trackwheelClick(int status, int time)
    {
        /* UiApplication.getUiApplication().pushScreen(new ViewMoreHotlist(nextGiftsId)); */
        return true;
    }
};
add(myListView);
for循环的

外部。您应该在for循环中添加。你是在循环中这样做的:

v.addElement(new ListRander(bmpResized,listTitle ,listDesc,listDesc2, navBar));

看起来不错。我无法看到您如何定义并稍后使用v,但列表需要以某种方式从v获取其数据。根据这个评论,听起来你已经做到了这一点:

  

如果我在for循环外添加ListView并添加add(myListView);在for循环中,此循环正确地在屏幕上添加记录

因此,您现在唯一的问题是,当您检测到列表单击时,您将获得最后一行的ID。您需要将点击处理程序更改为以下内容:

myListView = new CustomListField(v){
    public boolean trackwheelClick(int status, int time)
    {
        // which row is selected?
        int index = getSelectedIndex();
        String friendId = object.getJSONArray("friends_user_id").getString(index);
        UiApplication.getUiApplication().pushScreen(new ViewMoreHotlist(friendId));
        return true;
    }
};

您需要确保在调用object时保持JSON响应trackwheelClick()可用。你可以把它变成你班上的成员变量......也许你已经完成了这个。

解决问题的关键是在点击getSelectedIndex()后获取所选索引。