Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface Blackberry-Listfield布局问题_User Interface_Blackberry_Layout_Listfield - Fatal编程技术网

User interface Blackberry-Listfield布局问题

User interface Blackberry-Listfield布局问题,user-interface,blackberry,layout,listfield,User Interface,Blackberry,Layout,Listfield,在blackberry模拟器上显示列表字段时,我遇到了一个有趣的异常: 顶部的项目是单行文本的高度(大约12像素),其余的都很好。 有人知道为什么只有最上面的项目是这样画的吗?此外,当我在位置0添加一个空场地时,它仍然以这种方式显示第一个实际场地(位置1中的项目) 不知道该怎么办。 谢谢你的帮助 布局如下所示: ----------------------------------- | *part of image* | title | ---------------------

在blackberry模拟器上显示列表字段时,我遇到了一个有趣的异常:

顶部的项目是单行文本的高度(大约12像素),其余的都很好。 有人知道为什么只有最上面的项目是这样画的吗?此外,当我在位置0添加一个空场地时,它仍然以这种方式显示第一个实际场地(位置1中的项目)

不知道该怎么办。 谢谢你的帮助

布局如下所示:

-----------------------------------
| *part of image* | title         |
-----------------------------------
|                 | title         |
| * full image *  | address       |
|                 | city, zip     |
-----------------------------------
对象的名称如下所示:

listField = new ListField( venueList.size() );
listField.setCallback( this );
listField.setSelectedIndex(-1);
_middle.add( listField );
以下是drawListRow代码:

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

    listField.setRowHeight(90);
    Hashtable item = (Hashtable) venueList.elementAt( index );
    String venue_name = (String) item.get("name");
    String image_url = (String) item.get("image_url");
    String address = (String) item.get("address");
    String city = (String) item.get("city");
    String zip = (String) item.get("zip");
    EncodedImage img = null;

try 
    {
        String filename = image_url.substring(image_url.indexOf("crop/") 
            + 5, image_url.length() );
        FileConnection fconn = (FileConnection)Connector.open( 
            "file:///SDCard/Blackberry/project1/" + filename, 
            Connector.READ);            
        if ( !fconn.exists() )
        {

        }
        else
        {
            InputStream input = fconn.openInputStream();

            byte[] data = new byte[(int)fconn.fileSize()];
            input.read(data);
            input.close();
            if(data.length > 0)
            {
                EncodedImage rawimg = EncodedImage.createEncodedImage(
                    data, 0, data.length);                  
                int dw = Fixed32.toFP(Display.getWidth());
                int iw = Fixed32.toFP(rawimg.getWidth());
                int sf = Fixed32.div(iw, dw);
                img = rawimg.scaleImage32(sf * 4, sf * 4);
            }
            else
            {

            }
        }
}
catch(IOException ef)
{                

} 

   graphics.drawText( venue_name, 140, y, 0, width );
   graphics.drawText( address, 140, y + 15, 0, width );
   graphics.drawText( city + ", " + zip, 140, y + 30, 0, width );
   if(img != null)
   {
       graphics.drawImage(0, y, img.getWidth(), img.getHeight(), 
           img, 0, 0, 0);
   }    
}
应在构造后调用一次,而不是在每次重新绘制行时调用的内部:

listField = new ListField( venueList.size() );
listField.setRowHeight(90);
listField.setCallback( this );
listField.setSelectedIndex(-1);
_middle.add( listField );
应在构造后调用一次,而不是在每次重新绘制行时调用的内部:

listField = new ListField( venueList.size() );
listField.setRowHeight(90);
listField.setCallback( this );
listField.setSelectedIndex(-1);
_middle.add( listField );
阿曼, 希望你能用这个做点什么。您应该能够从这个失控的类中提取列表字段数据。请记住,这是一项正在进行的工作,因此您必须删除我的应用程序中非常明确的自定义内容。与依赖子字符串作为文件名的图像处理类似。 它对我来说很好,但它对任何人都不起作用,只是复制和粘贴,所以祝你好运

 package venue;

import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;

import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;

import net.rim.device.api.math.Fixed32;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.Display;
import net.rim.device.api.system.EncodedImage;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.FocusChangeListener;
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.MenuItem;
import net.rim.device.api.ui.Screen;
import net.rim.device.api.ui.Ui;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.BitmapField;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.ListField;
import net.rim.device.api.ui.component.ListFieldCallback;
import net.rim.device.api.ui.component.Menu;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.component.SeparatorField;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;

public class categoryView extends MainScreen implements FieldChangeListener, ListFieldCallback, FocusChangeListener  {

    private HorizontalFieldManager _top;
    private HorizontalFieldManager _nav;
    private VerticalFieldManager _middle;
    private int horizontalOffset;
    private final static long animationTime = 300;
    private long animationStart = 0;
    private int venue_id;
    private int category_id;
    private CustomButtonField rectangle;
    private Vector venueList = new Vector();
    private Hashtable venue_index = new Hashtable();
    private Vector image_index = new Vector();
    private ListField listField;
    private int last_menu_item = 2;
    private int last_nav = 2;
    private int before_last = 1;
    private int location_count = 0;
    private int img_width = 120;
    private int img_height = 80;
    private Field f;

    public categoryView(int id) {
        super();

        category_id = id;

        horizontalOffset = Display.getWidth();

        _top = new HorizontalFieldManager(Manager.USE_ALL_WIDTH | Field.FIELD_HCENTER)
        {
            public void paint(Graphics gr)
            {
                Bitmap bg = Bitmap.getBitmapResource("bg.png");
                gr.drawBitmap(0, 0, Display.getWidth(), Display.getHeight(), bg, 0, 0);
                subpaint(gr);
            }           
        };
        _nav = new HorizontalFieldManager(Field.USE_ALL_WIDTH);
        _middle = new VerticalFieldManager();

        add(_top);
        add(_nav);
        add(_middle);

        Bitmap lol = Bitmap.getBitmapResource("logo.png");
        BitmapField lolfield = new BitmapField(lol);
        _top.add(lolfield);

        HorizontalFieldManager nav = new HorizontalFieldManager(Field.USE_ALL_WIDTH | Manager.HORIZONTAL_SCROLL);

        Vector locs = getLocations();
        Hashtable locations = (Hashtable) locs.elementAt(0);
        Enumeration ne  = locations.keys();
        Enumeration nv = locations.elements();

        int counter = 1;
        if(locations.size() > 1)
        {
            counter = locations.size() - 1;
        }

        int count = 1;
        while(ne.hasMoreElements())
        {
            final String location_id = ne.nextElement().toString();
            String location = nv.nextElement().toString();
            last_nav = Integer.parseInt(location_id);

            rectangle = new CustomButtonField(location_id, location, 25, Field.FOCUSABLE);
            rectangle.setFocusListener(this);
            nav.add(rectangle);

            if(count == counter)
            {
                before_last = Integer.parseInt(location_id);
            }
            count ++;
        }   

        _nav.add(nav);

    }

    public void setDefaultLocation()
    {
        Vector locs = getLocations();
        Hashtable loc1 = (Hashtable) locs.elementAt(0);
        Enumeration er  = loc1.keys();
        Enumeration vr = loc1.elements();

        int i = 0;
        while(er.hasMoreElements())
        {
            final String location_id = er.nextElement().toString();

            if(i == 0)
            {
                last_menu_item = Integer.parseInt(location_id);
            }
            i ++;
        }

    }

    public void drawMiddle()
    {
        Vector venues = getVenues(category_id);
        Hashtable venue_list = (Hashtable) venues.elementAt(0);
        Enumeration e  = venue_list.keys();
        Enumeration v = venue_list.elements();

        int count = 0;
        while(e.hasMoreElements())
        {

            String vid = e.nextElement().toString();
            Hashtable elm = (Hashtable)v.nextElement();
            venueList.addElement(elm);
            venue_index.put(Integer.toString(count), (String) elm.get("venue_id"));

            EncodedImage img = null;
            String image_url = (String) elm.get("image_url");
            try 
            {
                String filename;
                    if(image_url.length() > 5)
                    {
                        filename = image_url.substring( image_url.indexOf("crop/") + 5, image_url.length() );
                    }
                    else
                    {
                        filename = "1.png";
                    }
                    FileConnection fconn = (FileConnection) Connector.open( "file:///SDCard/Blackberry/venue/" + filename, Connector.READ);

                    if ( !fconn.exists() )
                    {

                    }
                    else
                    {
                        InputStream input = fconn.openInputStream();

                        byte[] data = new byte[(int)fconn.fileSize()];
                        input.read(data);
                        input.close();
                        if(data.length > 0)
                        {
                            EncodedImage rawimg = EncodedImage.createEncodedImage(data, 0, data.length);

                            int dw = Fixed32.toFP(Display.getWidth());
                            int iw = Fixed32.toFP(rawimg.getWidth());
                            int sf = Fixed32.div(iw, dw);
                            img = rawimg.scaleImage32(sf * 4, sf * 4);
                            img_width = (int) Math.ceil(Display.getWidth() / 4);
                            img_height = (int) Math.ceil(Display.getWidth() / 6);
                        }
                        else
                        {

                        }
                    }
            }
            catch(IOException ef)
            {                

            } 

            image_index.addElement(img);

            count ++;
        }
        final int count_results = count;

        _middle = new VerticalFieldManager( Manager.VERTICAL_SCROLLBAR )
        {
            public void paint(Graphics graphics)
            {
                graphics.setBackgroundColor(0xFFFFFF);
                graphics.setColor(Color.BLACK);
                graphics.clear();
                super.paint(graphics);

            }
            protected void sublayout(int maxWidth, int maxHeight)
            {
                int displayWidth = Display.getWidth();
                //int displayHeight = Display.getHeight();
                int displayHeight = count_results * img_height;

                super.sublayout( displayWidth, displayHeight);
                setExtent( displayWidth, displayHeight);
            }

        };
        add(_middle);

        listField = new ListField( venueList.size() );
        listField.setCallback( this );
        listField.setSelectedIndex(-1);
        listField.setRowHeight(img_height);
        _middle.add( listField );

        _middle.add(new RichTextField(Field.NON_FOCUSABLE));
    }

    public boolean navigationClick(int status, int time) {

        Field focus = UiApplication.getUiApplication().getActiveScreen() .getLeafFieldWithFocus();

             if (focus instanceof ListField) {
                 int selected = listField.getSelectedIndex();
                 String venue_id = (String) venue_index.get(Integer.toString(selected));
                 moveScreens(venue_id);

        }
             return true;

 }

    void setListSize() 
    {
        listField.setSize( venueList.size() );
    }

    public void drawListRow( ListField listField, Graphics graphics, int index, int y, int width ) 
    {
        Hashtable item = (Hashtable) venueList.elementAt( index );

        String venue_name = (String) item.get("name");
        String address = (String) item.get("address");
        String city = (String) item.get("city");
        String zip = (String) item.get("zip");

        EncodedImage img = (EncodedImage) image_index.elementAt(index);

       graphics.drawText( venue_name, img_width + 10, y, 0, width );
       graphics.drawText( address, img_width + 10, y + 15, 0, width );
       graphics.drawText( city + ", " + zip, img_width + 10, y + 30, 0, width );
       if(img != null)
       {
           graphics.drawImage(0, y + 3, img.getWidth(), img.getHeight(), img, 0, 0, 0);
       }


    }

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

    public Vector getCategories()
    {
        Vector results = new Vector();

        database db = new database();
        Vector categories = db.getCategories();
        if(categories.size() > 0)
            results = categories;

        return results;
    }

    public Vector getLocations()
    {
        Vector results = new Vector();

        database db = new database();
        Vector subcats = db.getCategoryLocations(category_id);
        Hashtable subs = (Hashtable) subcats.elementAt(0);
        if(subs.size() > 0)
        {
            location_count = subs.size();
            results = subcats;
        }

        return results;
    }

    public Vector getVenues(int category_id)
    {
        Vector results = new Vector();

        database db = new database();
        Vector venues = db.getLocationVenues(category_id, last_menu_item);
        if(venues.size() > 0)
            results = venues;

        return results;
    }

    protected void makeMenu(Menu menu, int instance)
    {
        super.makeMenu(menu, instance);
        menu.add(new MenuItem("Home", 10, 20){
            public void run()
            {
                moveScreens("main");
            }
        });
        menu.add(new MenuItem("Search", 10, 20){
            public void run()
            {
                Dialog.inform("Search was clicked.");
            }
        });

        Vector locs = getLocations();
        Hashtable locations = (Hashtable) locs.elementAt(0);
        Enumeration e  = locations.keys();
        Enumeration v = locations.elements();

        while(e.hasMoreElements())
        {
            final String location_id = e.nextElement().toString();
            String location = v.nextElement().toString();

            menu.add(new MenuItem(location, 10, 20){
                public void run()
                {
                    Dialog.inform("Location " + location_id + " was clicked");
                }
            });
        }


    }

    public void moveScreens(String type)
    {
        if(type == "main")
        {
            UiApplication.getUiApplication().popScreen(this);
        }
        else
        {
            int venue_id = Integer.parseInt(type);

            Screen newScreen = new ViewVenue(venue_id);
            UiApplication.getUiApplication().pushScreen(newScreen);
        }
    }

    protected void sublayout(int width, int height)
    {
        super.sublayout(width, height);

        if(horizontalOffset > 0)
        {
            if(animationStart == 0)
            {
                animationStart = System.currentTimeMillis();
            }
            else
            {
                long timeElapsed = System.currentTimeMillis() - animationStart;
                if(timeElapsed >= animationTime)
                {
                    horizontalOffset = 0;
                }
                else
                {
                    float percentDone = (float)timeElapsed / (float)animationTime;
                    horizontalOffset = Display.getWidth() - (int)(percentDone * Display.getWidth());
                }
            }
        }
        setPosition(horizontalOffset, 0);

        if(horizontalOffset > 0)
        {
            UiApplication.getUiApplication().invokeLater(new Runnable(){
                public void run()
                {
                    updateLayout();
                }
            });
        }
    }

    public void fieldChanged(Field field, int context) 
    {

        int id = 0;

        if (field instanceof CustomButtonField) {
           id = ((CustomButtonField)field).getId();
        }        

        venue_id = id;
        Dialog.inform(Integer.toString(venue_id));
        //moveScreens("venue");

    }

    public void focusChanged(Field field, int eventType) {

        if((eventType == FocusChangeListener.FOCUS_GAINED)) {

            if (field instanceof CustomButtonField) {
              final int id = ((CustomButtonField)field).getId();

              if(id == last_nav && before_last != last_menu_item && last_nav != before_last)
              {
                  //updateContent(id);
                  f.setFocus();
              }
              else
              {
                  updateContent(id);
                  f = field;
              }



           } 
        }
    }

    public void updateContent(final int id)
    {
        UiApplication.getUiApplication().invokeLater(new Runnable(){
            public void run()
            {   
                delete(_middle);
                venueList.removeAllElements();
                image_index.removeAllElements();
                last_menu_item = id;

                drawMiddle();
            }
        });
    }

    public boolean onSavePrompt()
    {
        // do nothing
        return true;
    }

    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;
    }
}
阿曼, 希望你能用这个做点什么。您应该能够从这个失控的类中提取列表字段数据。请记住,这是一项正在进行的工作,因此您必须删除我的应用程序中非常明确的自定义内容。与依赖子字符串作为文件名的图像处理类似。 它对我来说很好,但它对任何人都不起作用,只是复制和粘贴,所以祝你好运

 package venue;

import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;

import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;

import net.rim.device.api.math.Fixed32;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.Display;
import net.rim.device.api.system.EncodedImage;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.FocusChangeListener;
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.MenuItem;
import net.rim.device.api.ui.Screen;
import net.rim.device.api.ui.Ui;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.BitmapField;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.ListField;
import net.rim.device.api.ui.component.ListFieldCallback;
import net.rim.device.api.ui.component.Menu;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.component.SeparatorField;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;

public class categoryView extends MainScreen implements FieldChangeListener, ListFieldCallback, FocusChangeListener  {

    private HorizontalFieldManager _top;
    private HorizontalFieldManager _nav;
    private VerticalFieldManager _middle;
    private int horizontalOffset;
    private final static long animationTime = 300;
    private long animationStart = 0;
    private int venue_id;
    private int category_id;
    private CustomButtonField rectangle;
    private Vector venueList = new Vector();
    private Hashtable venue_index = new Hashtable();
    private Vector image_index = new Vector();
    private ListField listField;
    private int last_menu_item = 2;
    private int last_nav = 2;
    private int before_last = 1;
    private int location_count = 0;
    private int img_width = 120;
    private int img_height = 80;
    private Field f;

    public categoryView(int id) {
        super();

        category_id = id;

        horizontalOffset = Display.getWidth();

        _top = new HorizontalFieldManager(Manager.USE_ALL_WIDTH | Field.FIELD_HCENTER)
        {
            public void paint(Graphics gr)
            {
                Bitmap bg = Bitmap.getBitmapResource("bg.png");
                gr.drawBitmap(0, 0, Display.getWidth(), Display.getHeight(), bg, 0, 0);
                subpaint(gr);
            }           
        };
        _nav = new HorizontalFieldManager(Field.USE_ALL_WIDTH);
        _middle = new VerticalFieldManager();

        add(_top);
        add(_nav);
        add(_middle);

        Bitmap lol = Bitmap.getBitmapResource("logo.png");
        BitmapField lolfield = new BitmapField(lol);
        _top.add(lolfield);

        HorizontalFieldManager nav = new HorizontalFieldManager(Field.USE_ALL_WIDTH | Manager.HORIZONTAL_SCROLL);

        Vector locs = getLocations();
        Hashtable locations = (Hashtable) locs.elementAt(0);
        Enumeration ne  = locations.keys();
        Enumeration nv = locations.elements();

        int counter = 1;
        if(locations.size() > 1)
        {
            counter = locations.size() - 1;
        }

        int count = 1;
        while(ne.hasMoreElements())
        {
            final String location_id = ne.nextElement().toString();
            String location = nv.nextElement().toString();
            last_nav = Integer.parseInt(location_id);

            rectangle = new CustomButtonField(location_id, location, 25, Field.FOCUSABLE);
            rectangle.setFocusListener(this);
            nav.add(rectangle);

            if(count == counter)
            {
                before_last = Integer.parseInt(location_id);
            }
            count ++;
        }   

        _nav.add(nav);

    }

    public void setDefaultLocation()
    {
        Vector locs = getLocations();
        Hashtable loc1 = (Hashtable) locs.elementAt(0);
        Enumeration er  = loc1.keys();
        Enumeration vr = loc1.elements();

        int i = 0;
        while(er.hasMoreElements())
        {
            final String location_id = er.nextElement().toString();

            if(i == 0)
            {
                last_menu_item = Integer.parseInt(location_id);
            }
            i ++;
        }

    }

    public void drawMiddle()
    {
        Vector venues = getVenues(category_id);
        Hashtable venue_list = (Hashtable) venues.elementAt(0);
        Enumeration e  = venue_list.keys();
        Enumeration v = venue_list.elements();

        int count = 0;
        while(e.hasMoreElements())
        {

            String vid = e.nextElement().toString();
            Hashtable elm = (Hashtable)v.nextElement();
            venueList.addElement(elm);
            venue_index.put(Integer.toString(count), (String) elm.get("venue_id"));

            EncodedImage img = null;
            String image_url = (String) elm.get("image_url");
            try 
            {
                String filename;
                    if(image_url.length() > 5)
                    {
                        filename = image_url.substring( image_url.indexOf("crop/") + 5, image_url.length() );
                    }
                    else
                    {
                        filename = "1.png";
                    }
                    FileConnection fconn = (FileConnection) Connector.open( "file:///SDCard/Blackberry/venue/" + filename, Connector.READ);

                    if ( !fconn.exists() )
                    {

                    }
                    else
                    {
                        InputStream input = fconn.openInputStream();

                        byte[] data = new byte[(int)fconn.fileSize()];
                        input.read(data);
                        input.close();
                        if(data.length > 0)
                        {
                            EncodedImage rawimg = EncodedImage.createEncodedImage(data, 0, data.length);

                            int dw = Fixed32.toFP(Display.getWidth());
                            int iw = Fixed32.toFP(rawimg.getWidth());
                            int sf = Fixed32.div(iw, dw);
                            img = rawimg.scaleImage32(sf * 4, sf * 4);
                            img_width = (int) Math.ceil(Display.getWidth() / 4);
                            img_height = (int) Math.ceil(Display.getWidth() / 6);
                        }
                        else
                        {

                        }
                    }
            }
            catch(IOException ef)
            {                

            } 

            image_index.addElement(img);

            count ++;
        }
        final int count_results = count;

        _middle = new VerticalFieldManager( Manager.VERTICAL_SCROLLBAR )
        {
            public void paint(Graphics graphics)
            {
                graphics.setBackgroundColor(0xFFFFFF);
                graphics.setColor(Color.BLACK);
                graphics.clear();
                super.paint(graphics);

            }
            protected void sublayout(int maxWidth, int maxHeight)
            {
                int displayWidth = Display.getWidth();
                //int displayHeight = Display.getHeight();
                int displayHeight = count_results * img_height;

                super.sublayout( displayWidth, displayHeight);
                setExtent( displayWidth, displayHeight);
            }

        };
        add(_middle);

        listField = new ListField( venueList.size() );
        listField.setCallback( this );
        listField.setSelectedIndex(-1);
        listField.setRowHeight(img_height);
        _middle.add( listField );

        _middle.add(new RichTextField(Field.NON_FOCUSABLE));
    }

    public boolean navigationClick(int status, int time) {

        Field focus = UiApplication.getUiApplication().getActiveScreen() .getLeafFieldWithFocus();

             if (focus instanceof ListField) {
                 int selected = listField.getSelectedIndex();
                 String venue_id = (String) venue_index.get(Integer.toString(selected));
                 moveScreens(venue_id);

        }
             return true;

 }

    void setListSize() 
    {
        listField.setSize( venueList.size() );
    }

    public void drawListRow( ListField listField, Graphics graphics, int index, int y, int width ) 
    {
        Hashtable item = (Hashtable) venueList.elementAt( index );

        String venue_name = (String) item.get("name");
        String address = (String) item.get("address");
        String city = (String) item.get("city");
        String zip = (String) item.get("zip");

        EncodedImage img = (EncodedImage) image_index.elementAt(index);

       graphics.drawText( venue_name, img_width + 10, y, 0, width );
       graphics.drawText( address, img_width + 10, y + 15, 0, width );
       graphics.drawText( city + ", " + zip, img_width + 10, y + 30, 0, width );
       if(img != null)
       {
           graphics.drawImage(0, y + 3, img.getWidth(), img.getHeight(), img, 0, 0, 0);
       }


    }

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

    public Vector getCategories()
    {
        Vector results = new Vector();

        database db = new database();
        Vector categories = db.getCategories();
        if(categories.size() > 0)
            results = categories;

        return results;
    }

    public Vector getLocations()
    {
        Vector results = new Vector();

        database db = new database();
        Vector subcats = db.getCategoryLocations(category_id);
        Hashtable subs = (Hashtable) subcats.elementAt(0);
        if(subs.size() > 0)
        {
            location_count = subs.size();
            results = subcats;
        }

        return results;
    }

    public Vector getVenues(int category_id)
    {
        Vector results = new Vector();

        database db = new database();
        Vector venues = db.getLocationVenues(category_id, last_menu_item);
        if(venues.size() > 0)
            results = venues;

        return results;
    }

    protected void makeMenu(Menu menu, int instance)
    {
        super.makeMenu(menu, instance);
        menu.add(new MenuItem("Home", 10, 20){
            public void run()
            {
                moveScreens("main");
            }
        });
        menu.add(new MenuItem("Search", 10, 20){
            public void run()
            {
                Dialog.inform("Search was clicked.");
            }
        });

        Vector locs = getLocations();
        Hashtable locations = (Hashtable) locs.elementAt(0);
        Enumeration e  = locations.keys();
        Enumeration v = locations.elements();

        while(e.hasMoreElements())
        {
            final String location_id = e.nextElement().toString();
            String location = v.nextElement().toString();

            menu.add(new MenuItem(location, 10, 20){
                public void run()
                {
                    Dialog.inform("Location " + location_id + " was clicked");
                }
            });
        }


    }

    public void moveScreens(String type)
    {
        if(type == "main")
        {
            UiApplication.getUiApplication().popScreen(this);
        }
        else
        {
            int venue_id = Integer.parseInt(type);

            Screen newScreen = new ViewVenue(venue_id);
            UiApplication.getUiApplication().pushScreen(newScreen);
        }
    }

    protected void sublayout(int width, int height)
    {
        super.sublayout(width, height);

        if(horizontalOffset > 0)
        {
            if(animationStart == 0)
            {
                animationStart = System.currentTimeMillis();
            }
            else
            {
                long timeElapsed = System.currentTimeMillis() - animationStart;
                if(timeElapsed >= animationTime)
                {
                    horizontalOffset = 0;
                }
                else
                {
                    float percentDone = (float)timeElapsed / (float)animationTime;
                    horizontalOffset = Display.getWidth() - (int)(percentDone * Display.getWidth());
                }
            }
        }
        setPosition(horizontalOffset, 0);

        if(horizontalOffset > 0)
        {
            UiApplication.getUiApplication().invokeLater(new Runnable(){
                public void run()
                {
                    updateLayout();
                }
            });
        }
    }

    public void fieldChanged(Field field, int context) 
    {

        int id = 0;

        if (field instanceof CustomButtonField) {
           id = ((CustomButtonField)field).getId();
        }        

        venue_id = id;
        Dialog.inform(Integer.toString(venue_id));
        //moveScreens("venue");

    }

    public void focusChanged(Field field, int eventType) {

        if((eventType == FocusChangeListener.FOCUS_GAINED)) {

            if (field instanceof CustomButtonField) {
              final int id = ((CustomButtonField)field).getId();

              if(id == last_nav && before_last != last_menu_item && last_nav != before_last)
              {
                  //updateContent(id);
                  f.setFocus();
              }
              else
              {
                  updateContent(id);
                  f = field;
              }



           } 
        }
    }

    public void updateContent(final int id)
    {
        UiApplication.getUiApplication().invokeLater(new Runnable(){
            public void run()
            {   
                delete(_middle);
                venueList.removeAllElements();
                image_index.removeAllElements();
                last_menu_item = id;

                drawMiddle();
            }
        });
    }

    public boolean onSavePrompt()
    {
        // do nothing
        return true;
    }

    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;
    }
}

顺便说一下,这里抛出了图像处理,以显示我对图像所做的操作。它实际上在其他地方构造为编码图像的向量,并由elementAt(index)调用。当在正确的位置时,它仍然会奇怪地显示。嗨!您正在使用什么设备/操作系统?顺便说一句,在构建listfield后,应该调用setRowHeight一次,而不是在每次重新绘制行时调用drawListRow的内部。4.7上的bold 9000谢谢提示。哦,这就解决了它。谢谢麦克斯,为什么不把这变成一个答案呢?顺便说一句,图像处理在这里是为了显示我在为图像做什么。它实际上在其他地方构造为编码图像的向量,并由elementAt(index)调用。当在正确的位置时,它仍然会奇怪地显示。嗨!您正在使用什么设备/操作系统?顺便说一句,在构建listfield后,应该调用setRowHeight一次,而不是在每次重新绘制行时调用drawListRow的内部。4.7上的bold 9000谢谢提示。哦,这就解决了它。谢谢麦克斯,为什么不把这变成一个答案?