2010-01-26 4 views
0

내 메인 스크린에 브라우저 필드를 추가하려고합니다. 현재, 내가 가지고있는 것 :메인 스크린과 함께 UIApplication을 사용하는 BlackBerry

public class BrowserFieldDemo extends UiApplication { 

private MainScreen _browserScreen; 
private BrowserField _bf2; 
private BrowserFieldConfig _bfConfig; 

public BrowserFieldDemo(final String url) { 
    _browserScreen = new MainScreen(); 
    _bfConfig = new BrowserFieldConfig(); 
    _bfConfig.setProperty(BrowserFieldConfig.NAVIGATION_MODE, 
      BrowserFieldConfig.NAVIGATION_MODE_POINTER); 
    _bfConfig.setProperty(BrowserFieldConfig.JAVASCRIPT_ENABLED, 
      Boolean.TRUE); 
    _bf2 = new BrowserField(_bfConfig); 
    _browserScreen.add(_bf2); 

    invokeLater(new Runnable() { 
     public void run() { 
      _bf2.requestContent(url); 
      pushScreen(_browserScreen); 
     } 
    }); 
} 
} 

다른 UI 요소 중에서 브라우저를 메인 스크린 클래스에 삽입하는 올바른 방법은 무엇입니까? 예를 들어, add (myBrowserField)? 나는 ...

public class LoginScreen extends MainScreen implements FieldChangeListener{} 

덕분에 내가 스레드에 대한 UIApplication을 확장 할 필요가 있기 때문에,이 작업을 수행 할 수있는 BrowserFieldDemo 클래스를 설정하는 방법을 확실 해요!


업데이트 :

public class LoginBrowserField extends Thread { 

    private LoginScreen loginScreen; 
    private String url; 

    public LoginBrowserField(String url, LoginScreen loginScreen) { 
     this.loginScreen = loginScreen; 
     this.url = url; 
    } 

    public void run() { 
     synchronized (UiApplication.getEventLock()) { 
     loginScreen.changeURL(url); 
     } 
    } 
} 

public class LoginScreen extends MainScreen implements FieldChangeListener { 

    public void changeURL(final String url) { 
     _bf2.requestContent(url); 
     _bf2.setFocus(); 
    } 

} 

그리고 브라우저, 내가 (LoginScreen에) 전화를 시작합니다 : : 지금 다음이

그러나

LoginBrowserField browser = new LoginBrowserField(url, this); 
browser.start(); 

를, 나는 위의 설정이 정확한지 확신 할 수 없습니다. 브라우저가 응용 프로그램에 표시되는 데 실제로 시간이 오래 걸리므로 내 URL을 올바르게 해결하십시오. 틀린 것을 볼 수 있습니까?

감사합니다.

답변

2

백그라운드에서 코드를 실행하기위한 새로운 스레드가 필요한 경우 (즉, HTTP를 통해 데이터로드) 새 Thread 객체를 만들고 start() 할 수 있습니다.이를 위해 UiApplication을 서브 클래스 할 필요가 없습니다. 한편

, 당신은 이벤트 핸들러 스레드 (예 : pushScreen 등), 당신은 예를 들어, UiApplication의 인스턴스를 얻을 수 UiApplication.getUiApplication()을 사용할 수 있습니다에서 실행하는 몇 가지 코드를 예약해야하는 경우 :

UiApplication.getUiApplication().invokeLater(new Runnable() { 
    public void run() { 
     pushScreen(_browserScreen); 
    } 
}); 
+0

도와 줘서 고마워, 마크! 위의 게시물을 업데이트했습니다. 체크 아웃 할 수 있습니까? 나는 당신이 제안한 것을했지만 브라우저가 페이지를 잘못 그리고 매우 천천히 해결하고 있기 때문에 올바르게 구현했는지 확신 할 수 없다. 고마워! – littleK

+0

RIM 개발자 도구와 함께 제공되는 샘플 애플리케이션에서 브라우저 필드 데모를 확인하십시오. 필드를 사용하는 방법과 리소스 페치 스레드를 설정하는 방법을 보여줍니다. –

+0

나는이 방법으로 일했고 효과가 있었다. 고마워요 !!!!!!!!!!!! – Swati

관련 문제