Вопрос по blackberry, browserfield, onclick – Blackberry 5.0 - нажата ссылка на ссылку BrowserField

4

Я пытаюсь справиться с событием вBrowserField когда пользователь фактически щелкает ссылку. Я училBrowserFieldListenerпопробовал ееdocumentCreated() метод, но это дает мне ответ, когда страница начинает загружаться. Мне нужен триггер в тот момент, когда пользователь нажимает на ссылку внутри browserField.

Что мне здесь не хватает?

Ваш Ответ

3   ответа
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);
    }
}
6

OverridehandleNavigationRequest () ProtocolController, как

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.
Спасибо за редактирование. Это был код, который я тоже отлаживал, и он должен работать (но не для меня, по некоторым причинам, я игнорирую), я отказался от него.
@MisterSmith я редактировал код. Это может помочь вам ...
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));

Похожие вопросы