Слушатель изменения поля Blackberry JDE
-
07-07-2019 - |
Вопрос
Я немного сбит с толку относительно того, как реализовать FieldChangeListener в Blackberry JDE. Один из способов - заставить мой основной класс реализовать FieldChangeListener, а затем создать внутри него метод с изменением поля, а другой - сделать:
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. Р>
Кажется, все подключено, но мои операторы печати отображаются, и если я вызываю метод, я получаю ошибку во время выполнения.
Имеет ли это смысл? Я просто совершенно не понимаю, как использовать слушателей на ежевике?
Там есть копия моего кода в целом ...
Решение 3
Я очень запутался, но мне удалось все исправить. Я создал новый класс с нуля, а затем просто скопировал и вставил в него свой старый код. Все работает. Единственное, что я изменил, - это импортировал только те классы, которые, по словам Eclipse, были необходимы (до того, как у меня были некоторые операторы импорта из различных учебников и т. Д., Поэтому некоторые из них, возможно, не использовались).
Возможно ли, что я импортировал что-то, что вызывало сбой?
Я действительно предпочел бы, чтобы большая часть моего кода находилась на самом экране, но при попытке этого все закончится, прежде чем я смогу даже загрузить. Что-то в парсере xml, которым я пользуюсь, не радует.
Там есть модифицированный код. Я действительно расстроен, потому что я знаю, что в этой рамочной работе есть какое-то неотъемлемое ПОНИМАНИЕ, что я не придираюсь, и что большинство моих проблем проистекает из этого. Я полагаю, что только практика поможет мне, хотя ^ _ ^ ;; Р>
Другие советы
Я посмотрел на твой код и ничего вопиющего не выскочило Тем не менее, я бы не назначил основной класс приложения обязанностями 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 в Field, Manager или Screen или использовать автономный FieldChangeListener.
Кроме того, чтобы нажать / вытащить экран из поля:
UiApplication.getUiApplication().pushScreen(nextScreen);
См. Как вернуться обратно на предыдущий экран в эмуляторе Blackberry?