BlackBerry JDE FieldChangelistener
-
07-07-2019 - |
문제
나는 BlackBerry JDE에서 FieldChangelistener를 구현하는 방법에 대해 혼란스러워합니다. 한 가지 방법은 내가 주 클래스를 FieldChangelistener를 구현 한 다음 내부에 전류적 인 방법을 가지고 있으며 다른 방법은 다음과 같습니다.
FieldChangeListener listenerUS = new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
System.out.println("Something changed!");
pushScreen(_newScreen);
}
};
어느 쪽이든, 푸시 스크린 또는 내가 작성한 사용자 정의 메소드와 같은 메소드를 호출하려고하면 런타임 오류가 발생합니다. 디버그 모드에서는 내 인쇄문도 표시되지 않습니다. 그러나 Fieldchanged 메소드를 완전히 제거하면 컴파일되지 않아서 "M" 예쁜 확실히 코드를보고 있습니까?
리스너를 버튼에 추가했습니다.
but_temp.setChangeListener(this);
(첫 번째 경우) 또는 리스너 루스를 넣어.
모든 것이 연결되어있는 것처럼 보이지만 인쇄문이 나타나고 메소드를 호출하면 런타임 오류가 발생합니다.
이게 말이 되요? 블랙 베리에서 청취자를 사용하는 방법에 대해 완전히 혼란 스럽습니까?
내 코드 전체가 있습니다 ...
해결책 3
나는 매우 혼란 스러웠지만 물건을 고칠 수있었습니다. 나는 처음부터 새로운 수업을 만들었고, 그냥 내 오래된 코드를 복사하고 붙여 넣었습니다. 모든 것이 작동합니다. 내가 변경 한 유일한 것은 Eclipse가 필요하다고 말한 클래스를 가져 오는 것뿐이었습니다 (다양한 튜토리얼 등의 수입 진술을하기 전에 일부는 사용되지 않았을 것입니다.)
물건이 충돌하는 것을 가져올 수 있었습니까?
나는 실제로 화면 자체에 대부분의 코드를 갖고 싶지만로드하기 전에 모든 것을 충돌시킨다. XML 파서에 대한 내용은 행복하지 않습니다.
수정 된 코드가 있습니다. 나는이 프레임 작업에 대한 고유 한 이해가 내가 grokking하지 않는다는 것을 알고 있기 때문에 정말 실망스럽고, 대부분의 문제가 이것에서 나온다는 것을 알고 있기 때문입니다. ^_ ^;;
다른 팁
나는 당신의 코드를 보았고 나에게 끔찍하게 잘못된 것은 없습니다. 그러나 나는 주요 응용 프로그램 클래스에 FieldChangelistener의 의무를 지정하지 않을 것입니다. 알아야 할 것이 아닙니다. 내가 당신을 위해 할 수있는 최선은 버튼 필드의 FieldChangelistener 인터페이스를 구현하는 예제 앱을 제공하는 것입니다. 솔루션은 아니지만 코드에 대한 더 나은 지식을 사용하면이 예와 다른 것을 선택할 수 있습니다. 도움이되기를 바랍니다.
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)에 동의합니다. Field, Manager 또는 Screen에서 FieldChangelistener를 구현하거나 독립형 FieldChangelistener를 사용하는 것이 일반적입니다.
또한 필드에서 스크린을 푸시/당기기 위해 :
UiApplication.getUiApplication().pushScreen(nextScreen);