Frage

Ich muss implementieren OnlongClickListener für Blackberry -Plattform.
Es kann für die Benutzereingabe (Ex -Telefon -Tastatur -Implementierung) oder andere Funktionen (Navigation, Rückspulensteuerung, Zoomsteuerung usw.) verwendet werden. Es gibt Anforderungen:

  • Zielsteuerung zum Hören - benutzerdefinierter Tastefeld
  • Es sollte Version mit 4,5 und 4.6 sein, also keine ToucheNs usw.
  • Konfigurierbare Klickzeit konfigurieren

Haben Sie einige Vorschläge zu Konzept und Implementierung?
Welche Probleme kann ich in die Verwendung mehrerer Hörer für das gleiche Feld verwenden?

Vielen Dank!

War es hilfreich?

Lösung

Nun, nur einfache Ratschläge. Override NavigationClick und Navigationunclick - Der Sturm wird automatisch Drücke auf dem Bildschirm auf diese Ereignisse abbilden.

Sie müssen einen separaten Thread oder einen Timer verwenden, um den Klick tatsächlich zu zitieren - es gibt keine Möglichkeit, dies sonst zu tun (Sie erhalten in beiden Ereignissen einen Zeitparameter, aber Sie möchten, dass das Ereignis vor dem Unklick abfeuert).

Außerdem müssen Sie vorsichtig sein, was passiert, wenn der Benutzer Unklicks sagt, und klickt dann erneut in der Zeitspanne eines langen Klickintervalls. Wahrscheinlich möchten Sie den Timer erneut starten.

Mehrere Zuhörer sollten keine Schwierigkeiten liefern - vorausgesetzt, die implementierende Klassen, die der Hörer implementiert, ist gut erzogen (keine starke Verarbeitung innerhalb der Rückrufmethode). Im Allgemeinen können Blackberry -UI -Komponenten gleichzeitig einen Maximum von 1 Hörer haben (deshalb gibt es ein SetChangelistener anstelle von Addchangelistener). Wenn es keinen zwingenden Grund gibt, die Android -Route mit mehreren Hörern zu begeben, würde ich mich bei nur einem festhalten - dies wird die Implementierung ein wenig erleichtern, und es steht im Einklang mit dem BB -Paradigma.

Andere Tipps

Ich habe Anthonys Ratschläge und Implementierung verwendet TIMERTask und Buttonfield.
Seien Sie mit Consume_click -Stil, irgendwie Ausgeschlossenes Navigationclick -Event.
Außerdem habe ich Probleme mit BOLD 9000/8900 Simulatoren, NavigationClick wird entlassen, nachdem Trackwheel ist ungeschliffen. Aber die Probe funktioniert gut mit Sturm.

Schnittstelle:

public interface LongClickListener {
    public void longClickEvent(Field field, int eventNumber);
}

Kontrolle selbst:

public class LongClickButtonField extends ButtonField { 

    boolean mContinuousMode = false;
    Timer mLongClickTimer = null;

    long mLongClickDelay = 1000;
    long mContinuousPeriod = 500;   
    LongClickListener mLongClickListener = null;

    public LongClickButtonField(String label) {
        super(label);
    }

    public LongClickButtonField(String label, boolean continuousMode) {
        this(label);
        mContinuousMode = continuousMode;
    }

    public void setLongClickListener(LongClickListener longClickListener) {
        mLongClickListener = longClickListener;
    }

    protected boolean navigationClick(int status, int time) {
        mLongClickTimer = new Timer();
        final Field eventArg = this;
        if(!mContinuousMode)
        {
        mLongClickTimer.schedule(new TimerTask() {public void run() {
            mLongClickListener.longClickEvent(eventArg, 0);
        }}, mLongClickDelay);
        }
        else
        {
            mLongClickTimer.schedule(new TimerTask(){
                int eventNum= 0;
                public void run() {             
                mLongClickListener.longClickEvent(eventArg, eventNum);
                eventNum++;
            }}, mLongClickDelay, mContinuousPeriod);
        }
        return true;
    }

    protected boolean navigationUnclick(int status, int time) {
        mLongClickTimer.cancel();
        return true;
    }
}

Verwenden:

public class Scr extends MainScreen implements LongClickListener {
    LabelField mStatusLabel = new LabelField("status") {
        protected void paint(Graphics graphics) {
            graphics.setColor(Color.BLACK);
            super.paint(graphics);
        };
    };

    public Scr() {
        LongClickButtonField button = new LongClickButtonField(
                "click & hold 5 s");
        LongClickButtonField buttonContinuous = new LongClickButtonField(
                "click & hold > 5 s", true);
        button.setLongClickListener(this);
        buttonContinuous.setLongClickListener(this);
        add(mStatusLabel);
        add(button);
        add(buttonContinuous);
    }

    public void longClickEvent(final Field field, final int eventNumber) {
        UiApplication.getUiApplication().invokeLater(new Runnable() {
            public void run() {
                mStatusLabel.setText(  
                        ((ButtonField) field).getLabel()
                        + " event #"  
                        + String.valueOf(eventNumber));
            }
        });

    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top