【问题标题】:Blackberry 5.0 - BrowserField handle link clickedBlackberry 5.0 - 点击了 BrowserField 句柄链接
【发布时间】:2012-08-12 17:18:35
【问题描述】:

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

我在这里错过了什么?

【问题讨论】:

    标签: blackberry onclick browserfield


    【解决方案1】:

    Override handleNavigationRequest() of ProtocolController like

    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);
    

    【讨论】:

    • 请问您能否在方法中包含要执行的操作? (特别是对 super.handleNavigationRequest 的调用或照常打开链接所需的任何操作)。我试图拦截一些 URL 模式,并且在调用 super 时总是得到一个空错误。
    • 感谢您的编辑。那也是我正在调试的代码,它应该可以工作(但不适合我,由于某种原因我忽略了)我放弃了它。
    【解决方案2】:

    使用我使用的以下类

    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);
        }
    }
    

    【讨论】:

      【解决方案3】:

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

      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));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-29
        相关资源
        最近更新 更多