使用下面的代码刷新包含XML Web服务中返回的数据的ListField之后。但是在刷新或刷新后,它将焦点设置到ListField的第一行。我不要我希望它在刷新后保持其当前焦点,以便用户甚至不知道有刷新。
protected void onUiEngineAttached(boolean attached) {
if (attached) {
// TODO: you might want to show some sort of animated
// progress UI here, so the user knows you are fetching data
Timer timer = new Timer();
// schedule the web service task to run every minute
timer.schedule(new WebServiceTask(), 0, 60*1000);
}
}
public MyScreen() {
setTitle("yQAforum");
listUsers.setEmptyString("No Users found", 0);
listUsers.setCallback(this);
add(listUsers);
}
private class WebServiceTask extends TimerTask {
public void run() {
//Fetch the xml from the web service
String wsReturnString = GlobalV.Fetch_Webservice("myDs");
//Parse returned xml
SAXParserImpl saxparser = new SAXParserImpl();
ByteArrayInputStream stream = new ByteArrayInputStream(wsReturnString.getBytes());
try {
saxparser.parse( stream, handler );
}
catch ( Exception e ) {
response.setText( "Unable to parse response.");
}
// now, update the UI back on the UI thread:
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
//Return vector sze from the handler class
listUsers.setSize(handler.getItem().size());
// Note: if you don't see the list content update, you might need to call
// listUsers.invalidate();
// here to force a refresh. I can't remember if calling setSize() is enough.
}
});
}
}
最佳答案
作为I suggested in the comments after my answer yesterday,您需要在刷新列表之前记录当前关注的行,然后在更新后立即重新设置关注的行。
因此,例如,在WebServiceTask
中:
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
int currentIndex = listUsers.getSelectedIndex();
int scrollPosition = getMainManager().getVerticalScroll();
//Return vector sze from the handler class
listUsers.setSize(handler.getItem().size());
listUsers.setSelectedIndex(currentIndex);
getMainManager().setVerticalScroll(scrollPosition);
}
});
在注释中发布的代码中,刷新后您正在调用
setSelectedIndex()
,结果为getSelectedIndex()
,这将永远不会做您想要的。关于java - Blackberry ListField:在更新期间保持行焦点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14065908/