2012-05-24 26 views
0

我試過這個鏈接How to customize a ListField in BlackBerry?創建ListField與三個lablefields爲每個列表row.but我不能看到列表字段items.but我可以說,listfield被添加。因爲導航點擊我能夠得到listfield.please任何人的選定索引幫助亞姆哪裏做錯了。我的代碼試圖爲...在Listfield無法查看黑莓的字段

public class InboxWithOutCheckboxeslistfield extends ListField implements ListFieldCallback { 
    private Vector rows; 
    private TableRowManager row ; 
    private LabelField UserName,Message,Timestamp; 


    /** 
    * Creates a new MyScreen object 
    */ 
    public InboxWithOutCheckboxeslistfield() { 
     // TODO Auto-generated constructor stub 

     super(0, ListField.MULTI_SELECT); 
     setRowHeight(80); 
     setCallback(this); 
     rows = new Vector(); 
     for (int x = 0; x < 10; x++) { 
      row = new TableRowManager(); 
      UserName = new LabelField("" + String.valueOf(x), 
        DrawStyle.ELLIPSIS | LabelField.USE_ALL_WIDTH 
        | DrawStyle.LEFT); 
      UserName.setText("name"); 
      row.add(UserName); 
      Message = new LabelField("" + String.valueOf(x), 
        DrawStyle.ELLIPSIS | LabelField.USE_ALL_WIDTH 
        | DrawStyle.RIGHT); 
      Message.setText("hai"); 
      row.add(Message); 
      Timestamp = new LabelField("" + String.valueOf(x), 
        DrawStyle.ELLIPSIS | LabelField.USE_ALL_WIDTH 
        | DrawStyle.RIGHT); 
      Timestamp.setText("hai"); 
      row.add(Timestamp); 
      rows.addElement(row); 

     } 
     setSize(rows.size()); 


    } 

    public void drawListRow(ListField listField, Graphics graphics, int index, 
      int y, int width) { 
     // TODO Auto-generated method stub 

     InboxWithOutCheckboxeslistfield list = (InboxWithOutCheckboxeslistfield) listField; 


     TableRowManager rowManager = (TableRowManager) list.rows.elementAt(index); 
     rowManager.drawRow(graphics, 0, y, width, list.getRowHeight()); 

    } 

    public Object get(ListField listField, int index) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    public int getPreferredWidth(ListField listField) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    public int indexOfList(ListField listField, String prefix, int start) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 


    private class TableRowManager extends Manager { 

     protected TableRowManager(){super(0); 
     // TODO Auto-generated constructor stub} 
     } 

     public void drawRow(Graphics graphics, int i, int y, int width, 
       int rowHeight) { 
      // TODO Auto-generated method stub 
      // Arrange the cell fields within this row manager. 
      layout(width, rowHeight); 

      // Place this row manager within its enclosing list. 
      setPosition(i, y); 

      // Apply a translating/clipping transformation to the graphics 
      // context so that this row paints in the right area. 
      graphics.pushRegion(getExtent()); 

      // Paint this manager's controlled fields. 
      subpaint(graphics); 

      graphics.setColor(0x00CACACA); 
      graphics.drawLine(0, 0, getPreferredWidth(), 0); 

      // Restore the graphics context. 
      graphics.popContext(); 

     } 

     protected void sublayout(int width, int height) { 
      // TODO Auto-generated method stub 
      // set the size and position of each field. 
      int fontHeight = Font.getDefault().getHeight(); 
      int preferredWidth = getPreferredWidth(); 

      Field field = getField(0); 

      layoutChild(field, preferredWidth - 16, fontHeight + 1); 
      setPositionChild(field, 34, 3); 
      // set the list name label field 
      field = getField(1); 
      layoutChild(field, 150, fontHeight + 1); 
      setPositionChild(field, 34, fontHeight + 6); 

      // set the due time name label field 
      field = getField(2); 
      layoutChild(field, 150, fontHeight + 1); 
      setPositionChild(field, preferredWidth - 152, fontHeight + 6); 

      setExtent(getPreferredWidth(), getPreferredHeight()); 

     } 
     // The preferred width of a row is defined by the list renderer. 
     public int getPreferredWidth() 
     {  

      return getWidth();   
     } 
     // The preferred height of a row is the "row height" as defined in the 
     // enclosing list.  
     public int getPreferredHeight()  
     { 
      return getHeight();  
     } 

    } 
    protected boolean navigationClick(int status, int time) { 
     int index1 = getSelectedIndex(); 
     System.out.println("The Clikced item is:"+index1); 
     return true; 
    } 
} 

和mainScreen類是

public class InboxWithOutCheckboxes extends MainScreen{ 

    private InboxWithOutCheckboxeslistfield inboxWithOutCheckboxeslistfield; 

    public InboxWithOutCheckboxes(){ 
     super(); 
     inboxWithOutCheckboxeslistfield = new InboxWithOutCheckboxeslistfield(); 
     add(inboxWithOutCheckboxeslistfield);  
     add(new SeparatorField()); 
    } 

} 

回答

1

試試看這個代碼 -

添加名單上主屏幕 - 列表

InboxWithOutCheckboxeslistfield InboxWithOutCheckboxeslistfield = new InboxWithOutCheckboxeslistfield(); 
add(InboxWithOutCheckboxeslistfield); 
add(new SeparatorField()); 

Click事件監聽器 - 下面

protected boolean navigationClick(int status, int time) { 
    getValue(); 
    return true; 
} 
protected void getValue() { 
Field f = getFieldWithFocus(); 

if (f instanceof ListField) { 
    ListField l = (ListField) f; 

    final int index = l.getSelectedIndex(); 

    FriendsRequestObject _contactslist = (FriendsRequestObject) FriendsRequest_fields.vector.elementAt(index); 
    final String _name = _contactslist.getSender_name(); 
    final String _id = _contactslist.getSender_id(); 
    //Dialog.alert(_name); 

    Application.getApplication().invokeLater(new Runnable() { 
     public void run() { 
      Dialog.alert(_name); 
     } 
    }); 
    // Dialog.alert("The selected element is: "+Integer.toString(l.getSelectedIndex())); 
} 
} 





import java.util.Vector; 
import net.rim.device.api.ui.Color; 
import net.rim.device.api.ui.DrawStyle; 
import net.rim.device.api.ui.Field; 
import net.rim.device.api.ui.Font; 
import net.rim.device.api.ui.Graphics; 
import net.rim.device.api.ui.Manager; 
import net.rim.device.api.ui.component.LabelField; 
import net.rim.device.api.ui.component.ListField; 
import net.rim.device.api.ui.component.ListFieldCallback; 

class InboxWithOutCheckboxeslistfield extends ListField implements ListFieldCallback { 

private Vector contacts; 
static Vector vector = new Vector(); 

private int contactslist_size = 0; 

private String name_ = "", id_="", status_=""; 

public InboxWithOutCheckboxeslistfield() { 
    super(0, ListField.MULTI_SELECT); 
    setRowHeight(60); 
    setEmptyString("Empty List", DrawStyle.HCENTER); 
    setCallback(this); 

    contacts = new Vector(); 

    vector.addElement(new FriendsRequestObject("1", "hai1", "")); 
    vector.addElement(new FriendsRequestObject("2", "hai2", "")); 
    vector.addElement(new FriendsRequestObject("3", "hai3", "")); 
    vector.addElement(new FriendsRequestObject("4", "hai4", "")); 

    contactslist_size = vector.size(); 

    for (int x = 0; x < contactslist_size; x++) { 

     FriendsRequestObject b = (FriendsRequestObject) vector.elementAt(x); 

     id_ = b.getSender_id().toString(); 
     name_ = b.getSender_name().toString(); 
     status_ = b.getimage().toString(); 



     TableRowManager row = new TableRowManager() { 
      public void paint(Graphics g) { 
       g.setBackgroundColor(Color.BLACK); 
       g.fillRect(0, 0, getWidth(), getHeight()); 
       g.setColor(Color.BLACK); 
       g.clear(); 
       super.paint(g); 
      } 
     }; 

     LabelField name1 = new LabelField(id_, DrawStyle.ELLIPSIS); 
     name1.setFont(Font.getDefault().derive(Font.PLAIN)); 
     row.add(name1); 

     LabelField name = new LabelField(name_, DrawStyle.ELLIPSIS); 
     name.setFont(Font.getDefault().derive(Font.PLAIN)); 
     row.add(name); 

     // add to the table 
     contacts.addElement(row); 
    } 

    setSize(contacts.size()); 
} 

// ListFieldCallback Implementation 
public void drawListRow(ListField listField, Graphics g, int index, int y, int width) { 
    InboxWithOutCheckboxeslistfield list = (InboxWithOutCheckboxeslistfield) listField; 
    TableRowManager rowManager = (TableRowManager) list.contacts.elementAt(index); 
    rowManager.drawRow(g, 0, y, width, list.getRowHeight()); 
} 

private class TableRowManager extends Manager { 
    public TableRowManager() { 
     super(0); 
    } 

    // Causes the fields within this row manager to be layed out then 
    // painted. 
    public void drawRow(Graphics g, int x, int y, int width, int height) { 
     // Arrange the cell fields within this row manager. 
     layout(width, height); 

     // Place this row manager within its enclosing list. 
     setPosition(x, y); 

     // Apply a translating/clipping transformation to the graphics 
     // context so that this row paints in the right area. 
     g.pushRegion(getExtent()); 

     // Paint this manager's controlled fields. 
     subpaint(g); 

     g.setColor(0x00CACACA); 
     g.drawLine(0, 0, getPreferredWidth(), 0); 

     // Restore the graphics context. 
     g.popContext(); 
    } 

    // Arrages this manager's controlled fields from left to right within 
    // the enclosing table's columns. 
    protected void sublayout(int width, int height) { 
     // set the size and position of each field. 
     int fontHeight = Font.getDefault().getHeight(); 
     int preferredWidth = getPreferredWidth(); 

     /* positioning of fields in list */ 
     // Status 
     Field field = getField(0); 
     layoutChild(field, preferredWidth, 50); 
     setPositionChild(field, 10, 5); 


     // Name 
     field = getField(1); 
     layoutChild(field, 150, fontHeight + 1); 
     //setPositionChild(field, 1, 2); 
     setPositionChild(field, 80, fontHeight); 
     setExtent(preferredWidth, getPreferredHeight()); 
       } 

    // The preferred width of a row is defined by the list renderer. 
    public int getPreferredWidth() { 
     return Graphics.getScreenWidth(); 
    } 

    // The preferred height of a row is the "row height" as defined in the 
    // enclosing list. 
    public int getPreferredHeight() { 
     return 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; 
} 

} 

FriendsRequestObject給出 -

public class FriendsRequestObject { 

private String sender_id; 
private String sender_name; 
private String image; 

public FriendsRequestObject(String sender_id, String sender_name, String image){ 
    this.sender_id = sender_id; 
    this.sender_name =sender_name; 
    this.image =image; 
} 



public String getimage() { 
    return image; 
} 
public void setimage(String image) { 
    this.image = image; 
} 

public String getSender_id() { 
    return sender_id; 
} 
public void setSender_id(String sender_id) { 
    this.sender_id = sender_id; 
} 

public String getSender_name() { 
    return sender_name; 
} 
public void setSender_name(String sender_name) { 
    this.sender_name = sender_name; 
} 

} 
+0

你能告訴這個listfield如何從listfield中獲取選定的項目,並從列表中刪除listitems。 – user1213202

1

編輯你的實現TableRowManager。您需要更改getPreferredWidth()getPreferredHeight()。如果sublayout()方法執行沒有完成,getWidth()getHeight()將返回錯誤的值。

// The preferred width of a row is defined by the list renderer. 
public int getPreferredWidth() { 
    return Display.getWidth(); 
} 

// The preferred height of a row is the "row height" as defined in the 
// enclosing list. 
public int getPreferredHeight() { 
    return getRowHeight(); 
}