BB プログラマーの皆さん、こんにちは。
タッチ スクリーン付きの Blackberry 6 電話でネイティブの連絡先 (アドレス帳) アプリケーションを見ると、非常に自然な動作をしています。
- 短いタップで、デフォルトのアクションが実行されます - 選択したアドレス帳のエントリを表示します
- 長押しすると、いくつかのアクションを含むメニューが表示されます。
私は ListField と同様の (そして直感的な) 動作を自分で作成しようとしています:短いタップでデフォルト アクションを実行し、画面の中央にメニューを表示し、長いタッチでいくつかの二次アクションを表示します。
私はたくさん検索しましたが、残念ながら、まったく反対の動作をするテストアプリを作成することしかできませんでした:
TouchGesture.HOVER をリッスンし、editMenu.run() を実行します。そして、短いタップの場合、メニューが自動的に表示されます(まだ見つけていませんが、何が表示されるのか、メインスクリーン/スクリーンのいくつかのメソッドですか?)。onMenu(0) を実行してみましたが、メニューが画面中央ではなく右上隅に表示されます。
以下は私の非常に単純なテストコードMyList.javaです。修正するのを手伝ってください:
package mypackage;
import java.util.*;
import net.rim.device.api.collection.*;
import net.rim.device.api.collection.util.*;
import net.rim.device.api.system.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.ui.decor.*;
import net.rim.device.api.util.*;
public class MyList extends UiApplication {
public static void main(String args[]) {
MyList app = new MyList();
app.enterEventDispatcher();
}
public MyList() {
pushScreen(new MyScreen());
}
}
class MyScreen extends MainScreen {
ObjectListField myList = new ObjectListField() {
protected boolean touchEvent(TouchEvent event) {
if (event.getEvent() == TouchEvent.GESTURE) {
TouchGesture gesture = event.getGesture();
if (gesture.getEvent() == TouchGesture.HOVER) {
System.err.println("XXX hover=" + gesture.getHoverCount() + ", index=" + myList.getSelectedIndex());
editMenu.run();
// onMenu(0);
return true;
}
}
return super.touchEvent(event);
}
};
private final MenuItem addMenu = new MenuItem("Add item", 0, 0) {
public void run() {
Status.show("Adding new item");
}
};
private final MenuItem editMenu = new MenuItem("Edit item", 1, 0) {
public void run() {
Status.show("Editing existing item: " + myList.getSelectedIndex());
}
};
private final MenuItem removeMenu = new MenuItem("Remove item", 2, 0) {
public void run() {
Status.show("Removing existing item: " + myList.getSelectedIndex());
}
};
public MyScreen() {
setTitle("How to display menu on long click?");
myList.set(new String[] { "Item 1", "Item 2", "Item 3", "Item 4", });
add(myList);
addMenuItem(addMenu);
addMenuItem(editMenu);
addMenuItem(removeMenu);
}
}
ありがとうございました!アレックス