2011-11-24 31 views
0

我正在創建一個黑莓應用程序。在這我使用自定義列表。當我選擇一個菜單項選擇,然後第一次工作正常,我再次選擇菜單,再次添加列表元素。在黑莓中選擇菜單時重複列表字段元素?

我想通過再次單擊來顯示一次性列表元素不重複元素。

如何刪除以前的列表元素。

我的代碼是在這裏

public class SecondScreen extends MainScreen { 

/*private LabelField tab1; 
private LabelField tab2; 
private LabelField tab3;*/ 

private CustomButton tab1; 
private CustomButton tab2; 
private CustomButton tab3; 
private LabelField spacer1; 
private LabelField spacer2; 
private VerticalFieldManager tabArea; 
private LabelField tab1Heading; 
private BasicEditField tab1Field1; 
private BasicEditField tab1Field2; 
private LabelField tab2Heading; 
private BasicEditField tab2Field1; 
private BasicEditField tab2Field2; 
private LabelField tab3Heading; 
private BasicEditField tab3Field1; 
private BasicEditField tab3Field2; 
private VerticalFieldManager tab1Manager; 
private VerticalFieldManager tab2Manager; 
private VerticalFieldManager tab3Manager; 
private BitmapField bmpfield; 
private LabelField title; 
static Font fontTitleTop; 
//XmlParse parse; 
ListField myList; 



public SecondScreen() { 



    fontTitleTop = Font.getDefault().derive(Font.BOLD, 25); 

    final Bitmap logo = Bitmap.getBitmapResource("title_bg.png"); 
    HorizontalFieldManager hM = new HorizontalFieldManager(Field.FIELD_TOP|Field.FIELD_HCENTER) 
    { 
     public void paintBackground(Graphics g) 
     { 
      g.drawBitmap(0,0,Display.getHorizontalResolution(),50,logo,0,0); 
      g.setColor(Color.WHITE); 
      g.setFont(SecondScreen.fontTitleTop); 
      if(Display.getWidth()>=360){ 
       g.drawText("Category",((Display.getWidth()/14)),10,0); 
      } 
      super.paintBackground(g); 
     }    

     protected void sublayout(int maxWidth, int maxHeight) 
     { 

      setExtent(maxWidth, 50); 

     } 

    }; 

    //hM.add(title); 
    add(hM); 



} 

protected void makeMenu(Menu menu, int instance) 
{ 
    super.makeMenu(menu, instance); 
    menu.add(new MenuItem("Rss",10,10) { 

     public void run() { 

      String url = "http://192.168.0.118/rss_new/categories.xml"; 
      XmlParse.category.removeAllElements(); 

      XmlParse xp = new XmlParse(); 
      xp.getDetails(url); 

      myList = new MyListField(XmlParse.category); 
      myList.setSize(XmlParse.category.size()); 
      System.out.println("Xml Parsing"); 
      add(myList); 

     } 
    }); 

    menu.add(new MenuItem("Fav",10,10) { 

     public void run() { 

      System.out.println("Fav. List"); 

     } 
    }); 
} 




private class MyListField extends ListField implements ListFieldCallback 
{ 


    private Vector content = new Vector(); 
    private Vector content2 = new Vector(); 
    MyListField list ; 


    public MyListField(Vector content) { 

     this.content = content; 
     } 

    public void drawListRow(ListField listField, Graphics graphics, 
      int index, int y, int width) { 

     list = (MyListField)listField; 

     String title = content.elementAt(index).toString(); 
     System.out.println("Content "+title+" at index"+ index); 

     TableManager tm = new TableManager(title, index); 
     tm.drawRow(graphics, 0, y, width, listField.getRowHeight()); 


    } 

    public Object get(ListField listField, int index) { 

     return null; 
    } 

    public int getPreferredWidth(ListField listField) { 

     return 0; 
    } 

    public int indexOfList(ListField listField, String prefix, int start) { 

     return 0; 
    } 

protected boolean navigationClick(int status, int time) 
    { 

      int selectedIndex = list.getSelectedIndex(); 
     System.out.print("List selected index ::"+selectedIndex); 
     ThirdScreen thirdScreen = new ThirdScreen(selectedIndex); 
     UiApplication.getUiApplication().pushScreen(thirdScreen); 



     return true; 
    } 


} 
+1

你試過什麼....? –

+0

@BB專家我參考了這個鏈接http://supportforums.blackberry.com/t5/Java-Development/Custom-ListField-row-with-images-and-text/td-p/227993 – Newts

+0

那麼哪個代碼你有實現... –

回答

1

你創建你的MenuItem S IN makeMenu()被稱爲每當屏幕需要顯示菜單的時間。這意味着每次用戶按下菜單按鈕時,都會創建添加到之前創建的菜單項目中的新菜單項,因此會生成重複項。

將您的MenuItem創建代碼移到屏幕的構造函數中。由於構造函數只被調用一次,所以您不必擔心重複創建的MenuItems。

在構造函數中添加菜單項只使用addMenuItem(MenuItem)

注意,沒有必要重寫makeMenu現在這樣你就可以將其刪除。

+0

我發佈了源代碼。 – Newts

+0

根據您的信息源更新答案。 – donturner

0

第一件事makeMenu(或第二,如果你想調用super.makeMenu)應了一句:

menu.deleteAll(); 

否則,每次按下菜單按鈕時,新的條目,除了加入的那些已經存在。