我在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而不是其他记录。
答案 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()
后获取所选索引。