-1

私はこのブラックベリーのプログラミングに慣れていません...ビットマップとビットマップフィールドからカスタムボタンを作成したいのですが、ビットマップフィールドをクリックすると、常に最初にメニュー項目が表示され(「開く」)、次にrunメソッドが実行されます.

クリック可能にしたいのですが、トラックパッドをクリックすると実行方法が実行されます(「開く」メニューを表示せずに実行方法を直接実行します)が、そのようにする方法がわかりません...

これは私のコードです:

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

}

4

2 に答える 2

2

ビットマップ ボタン フィールドのような単純なコンポーネントを自分で作成する必要はありません。RIM は、自由に含めることができるいくつかの優れたサンプルを提供しており、ここで説明されています。GitHub からソースを取得できます。おそらく最も関心があるのは、 BaseButtonFieldを拡張するBitmapButtonFieldだけです。

一般に、各ボタン/ビットマップ フィールドが独自のメニューとクリック処理を管理し、クリックをキャッチ/ルーティングする親画面ルーティングではなく、サンプル コードの構造も変更します。これにより、コントロールをきれいに再利用できます。

次に、ユーザーがボタンをクリックしたときに、「実行」オプションが表示されないようにします。標準の BB UX に従ってアクションを実行するだけです。これが、サンプルで見られる動作です。ユーザーに「ダブルクリック」体験を提供する機能が本当に必要な場合は、BaseButtonField 内にmakeContextMenuメソッドを実装できます。

于 2012-01-31T12:35:26.183 に答える
0

ButtonField を作成するときは、常に style を指定する必要がありますButtonField.CONSUME_CLICK。そうしないと、クリック イベントが画面に渡され、ユーザーがボタンをクリックするとメニューが開きますが、ボタンによってアクションが実行されます。例えば:

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

于 2013-02-17T00:28:28.503 に答える