2012-07-20 37 views
0

這是我最新的Custom_Listfield班。如何在listfield中使用listfieldcallback()設置不同的行高?

public class Custom_ListField extends ListField { 
private String[] title, category, date, imagepath; 
private int[] newsid, catsid; 
private List_News newslist; 
private Bitmap imagebitmap[], localimage = Config_GlobalFunction 
     .Bitmap("image_base.png"); 
private BrowserField webpage; 
private boolean islatest; 
private int highest = 0; 

private Vector content = null; 
private ListCallback callback = null; 

private int currentPosition = 0; 

public Custom_ListField(Vector content, boolean islatest) { 
    this.content = content; 
    this.islatest = islatest; 

    newsid = new int[content.size()]; 
    title = new String[content.size()]; 
    category = new String[content.size()]; 
    date = new String[content.size()]; 
    imagepath = new String[content.size()]; 
    catsid = new int[content.size()]; 
    imagebitmap = new Bitmap[content.size()]; 

    for (int i = 0; i < content.size(); i++) { 
     newslist = (List_News) content.elementAt(i); 
     newsid[i] = newslist.getID(); 
     title[i] = newslist.getNtitle(); 
     category[i] = newslist.getNewCatName(); 
     date[i] = newslist.getNArticalD(); 
     imagepath[i] = newslist.getImagePath(); 
     catsid[i] = newslist.getCatID(); 

     if (!imagepath[i].toString().equals("no picture")) { 
      imagebitmap[i] = Util_ImageLoader.loadImage(imagepath[i]); 
      if (imagebitmap[i].getHeight() > highest) 
       highest = imagebitmap[i].getHeight(); 
     } else { 
      imagebitmap[i] = localimage; 
     } 
     catsid[i] = newslist.getCatID(); 
     if (catsid[0] != 9) 
      this.setRowHeight(localimage.getHeight() + 10); 
     else 
      this.setRowHeight(highest + 10); 
    } 
    initCallbackListening(); 
} 

private void initCallbackListening() { 
    callback = new ListCallback(); 
    this.setCallback(callback); 
} 

private class ListCallback implements ListFieldCallback { 
    public ListCallback() { 
     setBackground(Config_GlobalFunction 
       .loadbackground("background.png")); 
    } 

    public void drawListRow(ListField listField, Graphics graphics, 
      int index, int y, int width) { 
     currentPosition = index; 
     graphics.setColor(Color.WHITE); 
     if (catsid[0] != 9) { 
      graphics.drawBitmap(
        Display.getWidth() - localimage.getWidth() - 5, 
        y 
          + ((listField.getRowHeight() - localimage 
            .getHeight())/2), 
        localimage.getWidth(), localimage.getHeight(), 
        imagebitmap[index], 0, 0); 
     } else { 
      graphics.drawBitmap(
        Display.getWidth() - imagebitmap[index].getWidth() - 5, 
        y 
          + (listField.getRowHeight() - imagebitmap[index] 
            .getHeight())/2, 
        imagebitmap[index].getWidth(), 
        imagebitmap[index].getHeight(), imagebitmap[index], 0, 
        0); 
     } 
     graphics.drawRect(0, y, width, listField.getRowHeight()); 

     graphics.setColor(Color.BLACK); 
     Vector text = Config_GlobalFunction.wrap(title[index], 
       Display.getWidth() - imagebitmap[index].getWidth() - 10); 
     for (int i = 0; i < text.size(); i++) { 
      int liney = y + (i * Font.getDefault().getHeight()); 
      graphics.drawText((String) text.elementAt(i), 5, liney + 3, 
        DrawStyle.TOP | DrawStyle.LEFT | DrawStyle.ELLIPSIS, 
        Display.getWidth() - imagebitmap[index].getWidth() - 10); 
     } 

     graphics.setColor(Color.GRAY); 
     graphics.drawText(date[index], 5, y + Font.getDefault().getHeight() 
       * text.size()); 

     if (islatest) { 
      graphics.setColor(Color.RED); 
      graphics.drawText(category[index], Font.getDefault() 
        .getAdvance(date[index]) + 15, y 
        + Font.getDefault().getHeight() * text.size()); 
     } 
    } 

    public Object get(ListField listField, int index) { 
     return content.elementAt(index); 
    } 

    public int getPreferredWidth(ListField listField) { 
     return Display.getWidth(); 
    } 

    public int indexOfList(ListField listField, String prefix, int start) { 
     return content.indexOf(prefix, start); 
    } 

} 

public int getCurrentPosition() { 
    return currentPosition; 
} 

protected boolean navigationClick(int status, int time) { 
    final int index = getCurrentPosition(); 
    Main.getUiApplication().pushScreen(new Custom_LoadingScreen(1)); 
    Main.getUiApplication().invokeLater(new Runnable() { 
     public void run() { 
      if (catsid[index] == 9) { 
       if (Config_GlobalFunction.isConnected()) { 
        webpage = new BrowserField(); 

        MainScreen aboutus = new Menu_Aboutus(); 
        aboutus.add(webpage); 
        Main.getUiApplication().pushScreen(aboutus); 

        webpage.requestContent("http://www.orientaldaily.com.my/index.php?option=com_k2&view=item&id=" 
          + newsid[index] + ":&Itemid=223"); 
       } else 
        Config_GlobalFunction.Message(
          Config_GlobalFunction.nowifi, 1); 
      } else 
       Main.getUiApplication().pushScreen(
         new Main_NewsDetail(newsid[index])); 
     } 
    }, 1 * 1000, false); 
    return true; 
} 
} 

我試着用this.setRowHeight(i, highest + 10);來設定。它返回錯誤的高度尺寸,仍然每行都有相同的高度。

我相信有一些棘手的部分,黑莓不支持設置不同的行高。

+0

http://stackoverflow.com/q/11430576/431639再次調用 - 溶液用自己接受的:)。 – Rupak 2012-07-20 06:47:52

+0

opps對不起,那個錯誤,我想我嘗試後,忘記不接受 – 2012-07-20 06:48:55

+0

一個是最老的代碼,現在是最新的,完全不同的 – 2012-07-20 06:49:35

回答

0

設置動態行的高度,就必須在listfieldcallback()

public class Custom_ListField extends ListField { 
private String[] title, category, date, imagepath; 
private int[] newsid, catsid; 
private List_News newslist; 
private Bitmap imagebitmap[], localimage = Config_GlobalFunction 
     .Bitmap("image_base.png"); 
private BrowserField webpage; 
private boolean islatest; 

private Vector content = null, text; 
private ListCallback callback = null; 

private int currentPosition = 0; 

public Custom_ListField(Vector content, boolean islatest) { 
    this.content = content; 
    this.islatest = islatest; 

    newsid = new int[content.size()]; 
    title = new String[content.size()]; 
    category = new String[content.size()]; 
    date = new String[content.size()]; 
    imagepath = new String[content.size()]; 
    catsid = new int[content.size()]; 
    imagebitmap = new Bitmap[content.size()]; 

    for (int i = 0; i < content.size(); i++) { 
     newslist = (List_News) content.elementAt(i); 
     newsid[i] = newslist.getID(); 
     title[i] = newslist.getNtitle(); 
     category[i] = newslist.getNewCatName(); 
     date[i] = newslist.getNArticalD(); 
     imagepath[i] = newslist.getImagePath(); 
     catsid[i] = newslist.getCatID(); 

     if (!imagepath[i].toString().equals("no picture")) { 
      imagebitmap[i] = Util_ImageLoader.loadImage(imagepath[i]); 
     } 
    } 
    initCallbackListening(); 
} 

private void initCallbackListening() { 
    callback = new ListCallback(); 
    this.setCallback(callback); 
    this.setRowHeight(-2); 
} 

private class ListCallback implements ListFieldCallback { 
    public ListCallback() { 

    } 

    public void drawListRow(ListField listField, Graphics graphics, 
      int index, int y, int width) { 
     currentPosition = index; 
     setBackground(BackgroundFactory.createBitmapBackground(
       Bitmap.getBitmapResource("background_news_list.png"), 
       Background.POSITION_X_LEFT, Background.POSITION_Y_TOP, 
       Background.REPEAT_SCALE_TO_FIT)); 

     if (!imagepath[index].toString().equals("no picture")) { 
      float ratio = (float) ((float) localimage.getHeight()/(float) imagebitmap[index] 
        .getHeight()); 
      Bitmap temp = new Bitmap(
        (int) (imagebitmap[index].getWidth() * ratio), 
        (int) (imagebitmap[index].getHeight() * ratio)); 
      imagebitmap[index].scaleInto(temp, Bitmap.FILTER_BILINEAR, 
        Bitmap.SCALE_TO_FIT); 
      imagebitmap[index] = temp; 

      graphics.drawBitmap(
        Display.getWidth() 
          - localimage.getWidth() 
          - 5 
          + ((localimage.getWidth() - imagebitmap[index] 
            .getWidth())/2), 
        y 
          + (listField.getRowHeight(index) - localimage 
            .getHeight())/2, 
        imagebitmap[index].getWidth(), 
        imagebitmap[index].getHeight(), imagebitmap[index], 0, 
        0); 

      graphics.setColor(Color.BLACK); 
      text = Config_GlobalFunction 
        .wrap(title[index], Display.getWidth() 
          - imagebitmap[index].getWidth() - 10); 

      for (int i = 0; i < text.size(); i++) { 
       int liney = y + (i * Font.getDefault().getHeight()); 
       graphics.drawText(
         (String) text.elementAt(i), 
         5, 
         liney + 3, 
         DrawStyle.TOP | DrawStyle.LEFT | DrawStyle.ELLIPSIS, 
         Display.getWidth() - imagebitmap[index].getWidth() 
           - 10); 
      } 
     } else { 
      graphics.setColor(Color.BLACK); 
      text = Config_GlobalFunction.wrap(title[index], 
        Display.getWidth() - 10); 
      for (int i = 0; i < text.size(); i++) { 
       int liney = y + (i * Font.getDefault().getHeight()); 
       graphics.drawText(
         (String) text.elementAt(i), 
         5, 
         liney + 3, 
         DrawStyle.TOP | DrawStyle.LEFT | DrawStyle.ELLIPSIS, 
         Display.getWidth() - 10); 
      } 
     } 

     if (text.size() == 2) { 
      graphics.setColor(Color.GRAY); 
      graphics.drawText(date[index], 5, y 
        + Font.getDefault().getHeight() + 3); 

      if (islatest) { 
       graphics.setColor(Color.RED); 
       graphics.drawText(category[index], Font.getDefault() 
         .getAdvance(date[index]) + 15, y 
         + Font.getDefault().getHeight() + 3); 
      } 
     } else if (text.size() == 3) { 
      graphics.setColor(Color.GRAY); 
      graphics.drawText(date[index], 5, y 
        + Font.getDefault().getHeight() * 2 + 3); 

      if (islatest) { 
       graphics.setColor(Color.RED); 
       graphics.drawText(category[index], Font.getDefault() 
         .getAdvance(date[index]) + 15, y 
         + Font.getDefault().getHeight() * 2 + 3); 
      } 
     } 

     if (!imagepath[index].toString().equals("no picture")) { 
      setRowHeight(index, imagebitmap[index].getHeight() + 10); 
     } else { 
      if (text.size() == 2) 
       setRowHeight(index, getRowHeight() + 9); 
      else if (text.size() == 3) { 
       setRowHeight(index, getRowHeight() * 15/10 + 9); 
      } 
     } 

     graphics.setColor(Color.WHITE); 
     graphics.drawRect(0, y, width, listField.getRowHeight(index)); 
    } 

    public Object get(ListField listField, int index) { 
     return content.elementAt(index); 
    } 

    public int getPreferredWidth(ListField listField) { 
     return Display.getWidth(); 
    } 

    public int indexOfList(ListField listField, String prefix, int start) { 
     return content.indexOf(prefix, start); 
    } 
} 

public int getCurrentPosition() { 
    return currentPosition; 
} 

protected boolean navigationClick(int status, int time) { 
    final int index = getCurrentPosition(); 
    Main.getUiApplication().pushScreen(new Custom_LoadingScreen(1)); 
    Main.getUiApplication().invokeLater(new Runnable() { 
     public void run() { 
      if (catsid[index] == 9) { 
       if (Config_GlobalFunction.isConnected()) { 
        webpage = new BrowserField(); 

        MainScreen aboutus = new Menu_Aboutus(); 
        aboutus.add(webpage); 
        Main.getUiApplication().pushScreen(aboutus); 

        webpage.requestContent("http://www.orientaldaily.com.my/index.php?option=com_k2&view=item&id=" 
          + newsid[index] + ":&Itemid=223"); 
       } else 
        Config_GlobalFunction.Message(
          Config_GlobalFunction.nowifi, 1); 
      } else 
       Main.getUiApplication().pushScreen(
         new Main_NewsDetail(newsid[index])); 
     } 
    }, 1 * 1000, false); 
    return true; 
} 
} 
相關問題