1

ListFieldコンポーネントのロングクリックをどのように検出しますか?

そのnavigationClick(int status、int time)をオーバーライドして、そのtime引数をいじくり回しますか(どのように?)、または長いクリックを検出するための組み込みのメソッドがありますか?

さらに重要なのは、このようなクリックを検出した後、メニュー(画面の中央にあるメニュー)をどのように表示するかです。

背景は、短いクリックで、ユーザーが選択したアイテムを編集できるようにしたいということです。また、ロングクリックでは、画面の中央にメニューを表示して、アイテムの削除、アイテムの表示順序の変更などの2番目のタスクを提供したいと思います。

以下は私の現在のテストコードです-src\mypackage \ 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 navigationClick(int status, int time) {
            System.err.println("XXX status=" + status + ", index=" + getSelectedIndex());
            return true;
        }
    };

    public MyScreen() {
        setTitle("How to detect long click?");
        myList.set(new String[] { "Item 1", "Item 2", "Item 3", "Item 4", }); 
        add(myList);
    }
}

ありがとうアレックス

4

1 に答える 1

0

touchEventフィールドのメソッドをオーバーライドできます。次に、次のようなことを行います。

ObjectListField myList = new ObjectListField() {
        long touchedAt = -1;
        long HOLD_TIME = 2000; // 2 seconds or whatever you define the hold time to be
        protected boolean touchEvent(TouchEvent message) {
            if(message.getEvent() == TouchEvent.DOWN) {
               touchedAt = System.currentTimeMillis();
            } else if(message.getEvent() == TouchEvent.UP) {
               if(System.currentTimeMillis() - touchedAt < HOLD_TIME)
                  touchedAt = -1; // reset
               else
                  //write logic you need for touch and hold
            }
            return true;
        }
    };

これは、アイデアを提供するための大まかな実装であることに注意してください。ここでは時間座標のみを使用しました。実装では、ユーザーが画面に触れた場所のX座標とY座標を考慮する必要があります。これは、ユーザーが指を動かした場合、それはタッチアンドホールドではないためです。

于 2011-05-06T12:56:19.240 に答える