3

I facing some issues in listview on navigation click. When i add add(myListView); inside for loop, this loop add records on screen again and again for example 1st time add 1st record, 2nd time add 1st record again with 2nd record. Below is the code:

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

And also if i add ListView outside the for loop and i add add(myListView); outside for loop, this loop adds records on screen correctly but get ID of last record every time if i click on 1st record.

I want all record display on screen correct and when i click on any record it takes id of that record not other record.

4

1 回答 1

2

您不想添加多个List。您想要一个包含许多的列表。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()

于 2013-05-28T11:01:16.380 回答