Blackberry 中 ListField 的关键字搜索

发布于 2024-12-16 21:39:34 字数 2482 浏览 1 评论 0原文

我正在创建一个ListField。在每一行中我添加一个图像和 3 个标签字段。 谁能告诉我如何为此创建一个keywordfilterField... 提前致谢 我是黑莓新手。 很少的代码会对我有很大帮助 这是我用于创建自定义列表的代码

class CustomListField extends ListField implements ListFieldCallback
{
String type;
int DISPLAY_WIDTH = Display.getWidth();
int DISPLAY_HEIGHT = Display.getHeight();
Vector mItems = new Vector();
Vector mine = new Vector();
Vector three= new Vector();     
// SizedVFM mListManager = new SizedVFM(DISPLAY_WIDTH, DISPLAY_HEIGHT - 40);
Bitmap searchresult = Bitmap.getBitmapResource("res/searchresult.png");
HorizontalFieldManager hfManager;
Bitmap image ,image1;
int z = this.getRowHeight();
CustomListField(String text1,String text2,String type) 
{
    for (int i = 1; i < 31; i++) 
    {      
        mItems.addElement(text1 +String.valueOf(i));
        mine.addElement("    "+text2);
        three.addElement("31");
    }
    this.type=type;
    this.setRowHeight((2*z));       
    this.setCallback(this);
    this.setSize(20);
    //mListManager.add(mListField);
    //add(mListManager);           
}
public void drawListRow(ListField field, Graphics g, int i, int y, int w) 
{
    // Draw the text.
    image = Bitmap.getBitmapResource("res/searchresult.png");
    String text = (String) get(field, i);
    String mytext = (String)mine.elementAt(i);
    String urtext=(String)three.elementAt(i);
    g.drawBitmap(0, y, image.getWidth(),image.getHeight(), image, 0, 0);
    g.drawText(text, image.getWidth(), y, 0, w);
    g.setColor(Color.GRAY);
    g.drawText(mytext, image.getWidth(), y+getFont().getHeight(), 0, w);
    g.drawText(urtext,Graphics.getScreenWidth()*7/8,y,0,w);
    if (i != 0) 
    {
          g.drawLine(0, y, w, y);
    }       
}

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

public int getPreferredWidth(ListField listField) 
{
    return DISPLAY_WIDTH;
}

public int indexOfList(ListField listField, String prefix, int start) 
{
    return 0;
}
protected boolean touchEvent(TouchEvent message) 
{
    // If click, process Field changed
    if ( message.getEvent() == TouchEvent.CLICK ) 
    {
        if(type.equals("Stops"))
            UiApplication.getUiApplication().pushScreen(new SearchScreen("Services")); 
        else if(type.equals("Services"))
            UiApplication.getUiApplication().pushScreen(new SearchScreen("Stops")); 
        return true;
    }
    return super.touchEvent(message);
}
}   

I am creating a ListField. in each row of I am adding a image and 3 labelfield.
Can any one tell me how to create a keywordfilterField for this...
Thanks in advance
I am new to blackberry.
Little code will help me alot
This is my code for creating a custom list

class CustomListField extends ListField implements ListFieldCallback
{
String type;
int DISPLAY_WIDTH = Display.getWidth();
int DISPLAY_HEIGHT = Display.getHeight();
Vector mItems = new Vector();
Vector mine = new Vector();
Vector three= new Vector();     
// SizedVFM mListManager = new SizedVFM(DISPLAY_WIDTH, DISPLAY_HEIGHT - 40);
Bitmap searchresult = Bitmap.getBitmapResource("res/searchresult.png");
HorizontalFieldManager hfManager;
Bitmap image ,image1;
int z = this.getRowHeight();
CustomListField(String text1,String text2,String type) 
{
    for (int i = 1; i < 31; i++) 
    {      
        mItems.addElement(text1 +String.valueOf(i));
        mine.addElement("    "+text2);
        three.addElement("31");
    }
    this.type=type;
    this.setRowHeight((2*z));       
    this.setCallback(this);
    this.setSize(20);
    //mListManager.add(mListField);
    //add(mListManager);           
}
public void drawListRow(ListField field, Graphics g, int i, int y, int w) 
{
    // Draw the text.
    image = Bitmap.getBitmapResource("res/searchresult.png");
    String text = (String) get(field, i);
    String mytext = (String)mine.elementAt(i);
    String urtext=(String)three.elementAt(i);
    g.drawBitmap(0, y, image.getWidth(),image.getHeight(), image, 0, 0);
    g.drawText(text, image.getWidth(), y, 0, w);
    g.setColor(Color.GRAY);
    g.drawText(mytext, image.getWidth(), y+getFont().getHeight(), 0, w);
    g.drawText(urtext,Graphics.getScreenWidth()*7/8,y,0,w);
    if (i != 0) 
    {
          g.drawLine(0, y, w, y);
    }       
}

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

public int getPreferredWidth(ListField listField) 
{
    return DISPLAY_WIDTH;
}

public int indexOfList(ListField listField, String prefix, int start) 
{
    return 0;
}
protected boolean touchEvent(TouchEvent message) 
{
    // If click, process Field changed
    if ( message.getEvent() == TouchEvent.CLICK ) 
    {
        if(type.equals("Stops"))
            UiApplication.getUiApplication().pushScreen(new SearchScreen("Services")); 
        else if(type.equals("Services"))
            UiApplication.getUiApplication().pushScreen(new SearchScreen("Stops")); 
        return true;
    }
    return super.touchEvent(message);
}
}   

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

与风相奔跑 2024-12-23 21:39:34

KeywordFilterField 的问题是它在内部使用自己的 ListField,所以我认为它很难自定义。如果您想按提供的方式使用它,则必须按如下方式使用它:

    //KeywordFilterField contains a ListField to display and a search edit field to type in the words
    KeywordFilterField keywordFilterField = new KeywordFilterField();  

    //Instantiate the sorted collection:
    CustomList cl = new CustomList(mItems);

    //Pass the custom collection
    keywordFilterField.setSourceList(cl, cl); 


    //Now you have to add two fields: first the list itself
    myManager.add(keywordFilterField);
    //And the search field, probably you'd want it at top: 
    myScreen.setTitle(keywordFilterField.getKeywordField());

您必须实现一个自定义可排序集合来保存您不想显示的项目:

    class CustomList extends SortedReadableList implements KeywordProvider {
        //In constructor, call super constructor with a comparator of <yourClass>
        public CustomList(Vector elements)
        {
            super(new <yourClass>Comparator());  //pass comparator to sort
            loadFrom(elements.elements());      
        } 

        //Interface implementation
        public String[] getKeywords( Object element )
        {        
            if(element instanceof <yourClass> )
            {            
                return StringUtilities.stringToWords(element.toString());
            }        
            return null;
        }  

        void addElement(Object element)
        {
            doAdd(element);        
        }

        //...
    }

您可以在JDE 示例文件夹。它被称为keywordfilterdemo。

要使用像您发布的那样的自定义列表,您可能需要编写很多东西,例如自定义 EditField 来输入关键字接收每个键入字符的事件,链接到排序集合上的搜索(也许您为此,可以使用 SortedReadableList),它将在 ListField 中选择该集合返回的第一个搜索结果。

The problem with KeywordFilterField is that it uses internally its own ListField, so I think it is going to be difficult to customize. If you wanted to use it as it is provided, you'll have to use it as follows:

    //KeywordFilterField contains a ListField to display and a search edit field to type in the words
    KeywordFilterField keywordFilterField = new KeywordFilterField();  

    //Instantiate the sorted collection:
    CustomList cl = new CustomList(mItems);

    //Pass the custom collection
    keywordFilterField.setSourceList(cl, cl); 


    //Now you have to add two fields: first the list itself
    myManager.add(keywordFilterField);
    //And the search field, probably you'd want it at top: 
    myScreen.setTitle(keywordFilterField.getKeywordField());

You'll have to implement a custom sortable collection to hold the items you wan't to display:

    class CustomList extends SortedReadableList implements KeywordProvider {
        //In constructor, call super constructor with a comparator of <yourClass>
        public CustomList(Vector elements)
        {
            super(new <yourClass>Comparator());  //pass comparator to sort
            loadFrom(elements.elements());      
        } 

        //Interface implementation
        public String[] getKeywords( Object element )
        {        
            if(element instanceof <yourClass> )
            {            
                return StringUtilities.stringToWords(element.toString());
            }        
            return null;
        }  

        void addElement(Object element)
        {
            doAdd(element);        
        }

        //...
    }

You have a full demo available inside the JDE samples folder. It is called keywordfilterdemo.

To use a custom list like the one you posted, you'll probably have to code a lot of stuff, like a custom EditField to type in the keywords receiving events on every typed character, linked to a search on a sortered collection (maybe you could use a SortedReadableList for this) which will select in your ListField the first search result returned by this collection.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文