我无法显示特定于在form1屏幕上点击的标题用户的详细表单信息,当我点击form1屏幕上的任何项目列表时,我只能显示第一项的详细信息(在我的代码中int index) = myNewsList.getSelectedIndex()始终返回0作为值)
这里是我的Rss App详细代码:
//method called by the parsing thread
public void addNews(News newsItem) {
newsVector.addElement(newsItem);//initialsed list with vector
myNewsList = new List(newsVector);
myNewsList.setListCellRenderer(new NewsListCellRenderer());
form1.addComponent(myNewsList);
form1.show();
myNewsList.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
int selectedIndex = myNewsList.getSelectedIndex();
if(selectedIndex != -1){
newsItem1 = (News)news.elementAt(selectedIndex);
Label l=new Label();
l.setText(newsItem1.getPubDate());
Form detailedForm=new Form();
detailedForm.addCommand(m_backCommand);
detailedForm.addCommandListener(this);
detailedForm.addComponent(l);
detailedForm.show();
}
}
});
}
Can you help?
答案 0 :(得分:2)
将动作侦听器添加到列表中。仅当您单击列表中的任何项目时才会调用它。在该动作侦听器中,获取所选项并将其强制转换为News类对象,因为您在列表中添加了News类对象。从该对象中获取新闻ID等唯一属性。使用当前表单对象(form1)将其传递到另一个屏幕。
myNewsList = new List(news);
myNewsList.setListCellRenderer(new NewsListRenderer());
myNewsList.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
News allNewsClassObjs = (News) myNewsList.getSelectedItem();
int newsid = allNewsClassObjs.getNewsId();
displayCompleteNewsScreen(form1,newsid);
}
});
form1.addComponent(myNewsList);
form1.addCommand(cmdDetails);
form1.setScrollable(true);
form1.setTransitionInAnimator(Transition3D.createRotation(250, true));
form1.show();
使用新闻ID,您可以在另一个屏幕中显示相关数据。向其添加命令。在back命令中,只显示form1对象。
public void displayCompleteNewsScreen(Form form1,int newsid){
// Get the related data and add it to another form object(form2).
form2.addCommand("Back");
form2.addCommandListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
form1.show();
}
});
form2.show();
}
而不是使用
int selectedIndex = myNewsList.getSelectedIndex();
if(selectedIndex != -1){
newsItem1 = (News)news.elementAt(selectedIndex);
}
使用以下代码
newsItem1 = (News)myNewsList.getSelectedItem();