Blackberry: как реализовать BitmapField в виде кнопки - PullRequest
0 голосов
/ 31 января 2012

Я новичок в программировании этой ежевики ... Я хочу сделать пользовательскую кнопку из растрового изображения и BitmapField, но когда я щелкаю по растровому полю, он всегда сначала показывает пункт меню («открыть»), а затем выполняет метод запуска.

Я хочу, чтобы он был активен нажатием кнопки мыши, когда я нажимаю на трекпад, он использует метод запуска (непосредственно метод запуска, не показывая меню "open"), но я не могу понять, как сделать это таким образом. ...

это мой код:

private void createFields() 
{
    Bitmap atas = Bitmap.getBitmapResource("banerputih.png");
    add(new BitmapField(atas, Field.FIELD_HCENTER));

    //separator
    add(new SeparatorField());
    Bitmap satu = Bitmap.getBitmapResource("wisata.png");
    Bitmap dua = Bitmap.getBitmapResource("trasport.png");
    Bitmap tiga = Bitmap.getBitmapResource("other.png");
    Bitmap empat = Bitmap.getBitmapResource("aboutme.png");
    Bitmap three = Bitmap.getBitmapResource("3.gif");
    add( new BitmapField(satu, Field.FOCUSABLE | Field.FIELD_HCENTER |Field.HIGHLIGHT_FOCUS));
    add(new BitmapField(dua, Field.FOCUSABLE | Field.FIELD_HCENTER | Field.HIGHLIGHT_FOCUS));
    add(new BitmapField(tiga, Field.FOCUSABLE | Field.FIELD_HCENTER | Field.HIGHLIGHT_FOCUS));
    add(new BitmapField(empat, Field.FOCUSABLE | Field.FIELD_HCENTER | Field.HIGHLIGHT_FOCUS));
    add(new SeparatorField()); 
    add(new BitmapField(three, Field.FIELD_HCENTER));
    add(new SeparatorField());

    //Disini ditambahin Gambar
    //panjang 480 pixel

}

//menambahkan menu open TODO
MenuItem _openAction = new MenuItem("Open",100000,10)
{

    public void run() 
    {
        getValue();

    }

};

//menu about TODO
MenuItem _AboutAction = new MenuItem("About",100,100)
{
    public void run()
    {
        UiApplication.getUiApplication().pushScreen(new AboutScreen());
    }
};

//method getValue();
protected void getValue()
{
    Field f = getFieldWithFocus();
    if (f instanceof BitmapField)

    {
        BitmapField b = (BitmapField)f;
        b.getIndex();
        //untuk cek index
        //Dialog.alert(Integer.toString(b.getIndex()));

        if (b.getIndex() == 2)
        {

            UiApplication.getUiApplication().pushScreen(new wisataScreen());
        }
        else if (b.getIndex()== 3)
        {
            UiApplication.getUiApplication().pushScreen(new TransportScreen());
        }
        else if (b.getIndex()== 4)
        {
            UiApplication.getUiApplication().pushScreen(new HotelScreen());

        }else if (b.getIndex()== 5)
        {
            UiApplication.getUiApplication().pushScreen(new AboutScreen());
        }
    }
}

public void makeMenu(Menu m, int instance)
{
    m.add(_openAction);
    m.add(_AboutAction);
    super.makeMenu(m, instance);
}

}

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Вам не нужно самостоятельно писать простой компонент, такой как поле растровых кнопок. RIM предоставил несколько хороших примеров, которые вы можете свободно включать, и они описаны здесь . Вы можете извлечь источник из GitHub, и единственное, что вас больше всего волнует, это BitmapButtonField , который расширяет BaseButtonField .

В общем, я бы также изменил вашу структуру в вашем примере кода, чтобы каждое поле кнопки / растрового изображения управляло своим собственным меню и обработкой щелчков, а не маршрутизацией родительского экрана, отслеживающей / направляющей щелчки. Это позволит вам повторно использовать ваши элементы управления чисто.

Во-вторых, когда пользователь нажимает на кнопку, вы не хотите, чтобы он видел опцию «Выполнить». Вы должны просто запустить действие в соответствии со стандартным BB UX. Вот поведение, которое вы увидите в примерах. Если вам действительно нужна возможность предоставить пользователю возможность «двойного щелчка», вы можете реализовать метод makeContextMenu в BaseButtonField.

0 голосов
/ 17 февраля 2013

при создании ButtonField всегда следует указывать стиль ButtonField.CONSUME_CLICK. Если вы этого не сделаете, событие щелчка будет передано на экран, и меню откроется, когда пользователь нажимает кнопку, хотя ваша кнопка все равно будет вызывать выполнение действия. например:

ButtonField clearButton = new ButtonField("Clear", ButtonField.CONSUME_CLICK);

...