2

form1画面でユーザーがクリックしたタイトルに固有の詳細なフォーム情報を表示できません.form1画面でアイテムリストをクリックすると、最初のアイテムの詳細のみを表示できます(私のコードではint index = myNewsList. getSelectedIndex() は値として常に 0 を返します)

Rss アプリの詳細なコードは次のとおりです。

                     //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?
4

1 に答える 1

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 コマンドを追加します。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();
于 2012-08-07T05:55:22.263 に答える