【问题标题】:Blackberry - Clickable ListView With Different ID'sBlackberry - 具有不同 ID 的可点击 ListView
【发布时间】:2013-05-28 09:55:43
【问题描述】:

我在导航点击的列表视图中遇到了一些问题。当我在 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 而不是其他记录。

【问题讨论】:

  • 这扩展了列表字段?
  • @Signare .. 是的,这是从 ListField 扩展而来的。
  • 您想要多少个列表?你想要一个列表还是许多列表?一个列表可以有很多行。
  • @Nate .. 我想要很多列表。基本上它取决于计数totalfriends,从数据库中获取值并根据该值在屏幕上添加列表字段。
  • @Nate ...请查看此图片[链接]omaghconcepts.com/Friends.png,当时只显示一条记录,当数据增加时,列表字段行数也会增加。

标签: blackberry


【解决方案1】:

您不想添加多个列表。您需要一个列表,其中包含许多。 JSON 数据中的每条记录都应该是列表中的一行。

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

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

for 循环之外。您应该只是在 for 循环中添加 rows 。您正在循环内执行此操作:

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;
    }
};

您需要确保在调用 trackwheelClick() 时保持 JSON 响应 object 可用。你可以让它成为你类中的成员变量......也许你已经这样做了。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    相关资源
    最近更新 更多