سؤال

وأنا نوع من الخلط حول كيفية تنفيذ FieldChangeListener في JDE بلاك بيري. طريقة واحدة لديها لي أن الطبقة الرئيسية بلدي تنفيذ FieldChangeListener، ومن ثم لديها طريقة fieldchanged داخل منه، وآخر قد لي القيام به:

    FieldChangeListener listenerUS = new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
System.out.println("Something changed!");
pushScreen(_newScreen);
}
};

وفي كلتا الحالتين، إذا حاولت استدعاء أسلوب (مثل pushScreen، أو أسلوب مخصصة لقد كتب)، وأحصل على خطأ وقت التشغيل. في وضع التصحيح، يتم عرض أي من البيانات المطبوعة بلدي، إما. ومع ذلك، إذا كنت إزالة طريقة fieldChanged صريح، فإنه لن حتى تجميع، لذلك أنا "م <م> جميلة متأكد من انها رؤية رمز؟

ولقد أضاف المستمع إلى زر أريد أن التوصيل إما من خلال وجود:

            but_temp.setChangeListener(this);

و(في الحالة الأولى) أو عن طريق وضع listenerUS.

ويبدو أن كل شيء يكون مدمن مخدرات، ولكن البيانات المطبوعة بلدي تظهر، وإذا كنت استدعاء أسلوب، وأحصل على خطأ وقت التشغيل.

هل هذا معقول؟ أنا مجرد الخلط تماما حول كيفية استخدام المستمعين على بلاك بيري؟

http://pastie.org/618950

ومن هناك نسخة من قانون بلدي ككل ...

هل كانت مفيدة؟

المحلول 3

وأنا في حيرة عظمى، ولكنني تمكنت من إصلاح الأمور. أنا خلقت طبقة جديدة من الصفر، ومن ثم نسخ ولصق فقط بلدي القانون القديم فيه. كل شيء يعمل. الشيء الوحيد الذي تغير كان يستورد فقط الفئات التي قال الكسوف هو ضروري (قبل كان لي بعض التصريحات الاستيراد من مختلف البرامج التعليمية، وما إلى ذلك وربما لا تستخدم بعض).

هل من الممكن كنت استيراد شيء الذي كان يسبب الأمور إلى تعطل؟

وأنا حقا أن يكون بدلا معظم قانون بلدي في الشاشة نفسها، ولكن تحاول أن تحطم كل شيء قبل أن أتمكن من تحميل حتى. شيئا عن محلل XML أنا باستخدام عدم سعيدة.

http://pastie.org/621932

وهناك رمز تعديلها. أنا محبط حقا، لأنني أعرف أن هناك بعض الفهم الأصيل لهذا العمل الإطار الذي أنا لا grokking، وأن معظم مشاكلي قادمون من هذا. أفترض أن الممارسة الوحيدة مساعدتي، على الرغم من ^ _ ^ ؛؛

نصائح أخرى

ونظرت في التعليمات البرمجية وحرج بشكل صارخ قفز في وجهي. ومع ذلك، وأود أن لا تعين فئة التطبيق الرئيسية واجبات كونها FieldChangeListener. انها ليست شيئا يجب أن تكون على علم. أفضل ما يمكن القيام به بالنسبة لك هو توفير التطبيق المثال أن تطبق الواجهة FieldChangeListener لButtonField. انها ليست الحل ولكن ربما مع علمك أفضل من التعليمات البرمجية الخاصة بك عليك أن تكون قادرا على التقاط شيء من هذا يختلف من هذا المثال. نأمل أن يساعد.

import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.FieldChangeListener;

/**
 * Test implementation of ButtonField.
 */
public class TestAppMain extends UiApplication 
{
    /**
     * Default Constructor.
     */
    private TestAppMain() {        
        pushScreen(new AppScreen());
    }

    /**
     * App entry point.
     * @param args Arguments.
     */
    public static void main(String[] args) {
        TestAppMain app = new TestAppMain();
        app.enterEventDispatcher();
    }

    /**
     * Main application screen.
     */
    private static class AppScreen extends MainScreen 
    {
        /**
         * Default constructor.
         */
        public AppScreen() {
            LabelField title = new LabelField("Button Test Demo",
                    LabelField.ELLIPSIS | LabelField.USE_ALL_WIDTH);
            setTitle(title);

            // Create a button with a field change listener.
            FieldChangeListener listener = new FieldChangeListener() {
                public void fieldChanged(Field field, int context) {
                    ButtonField buttonField = (ButtonField) field;
                    System.out.println("Button pressed: " + buttonField.getLabel());
                }
            };
            ButtonField buttonField = new ButtonField("Test Button", ButtonField.CONSUME_CLICK);            
            buttonField.setChangeListener(listener);
            add(buttonField);
        }               

        /**
         * Handle app closing.
         */
        public void close() {
            Dialog.alert("Goodbye!");
            System.exit(0);
            super.close();
        }
    }
}

وأنا أتفق مع Fostah (+1)، فإنه من الشائع أن تنفيذ FieldChangeListener في الميدان، مدير أو الشاشة أو استخدام FieldChangeListener مستقل.
أيضا، لدفع / سحب الشاشة من الميدان:

UiApplication.getUiApplication().pushScreen(nextScreen);

كيفية التنقل إلى الخلف إلى الشاشة السابقة في محاكي بلاك بيري؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top