Blackberry 5.0 - 单击BrowserField句柄链接

时间:2012-08-12 17:18:36

标签: blackberry onclick browserfield

我正在尝试在用户实际点击链接时处理BrowserField中的事件。 我研究了BrowserFieldListener,尝试了它的documentCreated()方法但是在页面开始加载时给了我一个响应。当用户点击browserField中的链接时,我想要一个触发器。

我在这里缺少什么?

3 个答案:

答案 0 :(得分:6)

覆盖ProtocolController的handleNavigationRequest(),如

ProtocolController controller = new ProtocolController(browserField) {
    public void handleNavigationRequest(BrowserFieldRequest request) throws Exception {
         /* 
         Here you get the redirection link using 
           request.getURL() 
         and do what you want to do 
          */
      // to display url in browserfield use
      InputConnection inputConnection = handleResourceRequest(request);
      browserField.displayContent(inputConnection, request.getURL()); 

    }
};

browserField.getConfig().setProperty(BrowserFieldConfig.CONTROLLER, controller);

答案 1 :(得分:3)

使用我使用的以下类

public class CacheProtocolController extends ProtocolController{
    public CacheProtocolController() {
        super(browserField);     
    }

    /**
    * Handle navigation requests (e.g., link clicks)
    */
    public void handleNavigationRequest(final BrowserFieldRequest request) throws Exception {
        UiApplication.getUiApplication().invokeAndWait(new Runnable() {
            public void run() {
                // TODO Auto-generated method stub
                Logger.debug("*******URL*******",request.getURL() );
        });
    }

    /**
    * Handle resource request (e.g., images, external css/javascript resources)
    */
    public InputConnection handleResourceRequest(BrowserFieldRequest request) throws Exception {
        return super.handleResourceRequest(request);
    }
}

答案 2 :(得分:0)

我使用以下类解决了这个问题:

public class CacheProtocolController extends ProtocolController{
    private SparseList sparseList = null;
    private int imageIndex ;
    private int click = 0;
    private BrowserField browserField = null;

    public CacheProtocolController(BrowserField browserField,SparseList sparseList,int imageIndex ) {
        super(browserField);
        this.sparseList = sparseList;
        this.imageIndex = imageIndex;
    }

    /**
    * Handle navigation requests (e.g., link clicks)
    */
    public void handleNavigationRequest(final BrowserFieldRequest request) throws Exception {
        UiApplication.getUiApplication().invokeAndWait(new Runnable() {
            public void run() {
                Logger.debug("*******URL*******",request.getURL() );
                String requestUrl = null;
                requestUrl = FileManipulations.replaceAll(request.getURL(), "file:///SDCard/BlackBerry/pictures/", "../");
                Logger.debug("*******requestUrl*******",requestUrl );
                Enumeration enumeration = sparseList.elements();
                while (enumeration.hasMoreElements()) {
                    final News news = (News) enumeration.nextElement();
                    if(news.getDetailsURL().equalsIgnoreCase(requestUrl)){
                        if(click == 1){
                            click = 0;
                            UiApplication.getUiApplication().pushScreen(new DetailedNewsScreen(news.getImageURL() , imageIndex));
                        } else
                            click++;
                    }
                }
            }
        });
    }

    /**
    * Handle resource request (e.g., images, external css/javascript resources)
    */
    public InputConnection handleResourceRequest(BrowserFieldRequest request) throws Exception {
        return super.handleResourceRequest(request);
    }

}

MainScren中使用以下

browserField = new BrowserField();
browserField.getConfig().setProperty(BrowserFieldConfig.CONTROLLER, new CacheProtocolController(browserField,List,index));