Android ClickableSpan onclick кажется не вызывается - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь добавить ClickableSpan к некоторым динамическим URL-адресам PDF в моем диалоговом окне. Я хочу сделать это потому, что в настоящее время PDF-файлы не открываются в браузере устройства по умолчанию. Однако некоторые устройства с уже установленным приложением для просмотра PDF могут загрузить PDF. Но мне нужно открыть pdf во всех устройствах.

То, что я пытаюсь сделать здесь, это установить clickablespan для этих ссылок pdf и открыть в webview.

Моя проблема в том, что onClick метод, кажется, не вызывается, и все же, ссылка пытается открыться в браузере по умолчанию.

Я попытался сделать

setLinksClickable(false);

и комментируя

messageText.setMovementMethod(LinkMovementMethod.getInstance());

, но метод onClick не выполняется. но интересно, что updateDrawState(TextPaint ds) метод выполняется, и я могу изменить цвет ссылки, как я хочу.

Это сообщение содержит другие URL-адреса, адреса электронной почты и номера телефонов, которые мне нужно нажимать, делая только PDF-URL-адреса дляОбращайтесь к clickableSpan.

Благодарим вас за то, что кто-то может помочь мне разобраться с проблемой здесь или другим способом ее решения.

Ниже приведен код

Спасибозаранее

 TextView messageText = customeDialog.findViewById(R.id.text);
 final WebView webView = customeDialog.findViewById(R.id.pdf_viewer);

 Spanned formattedString  = Utils.getHtmlFromString(message);
 messageText.setText(formattedString);

 Map<String, String> links = Utils.extractUrls(URLDecoder.decode(message));
    if(null != links && links.size() > 0 ){

        Iterator it = links.entrySet().iterator();
        while (it.hasNext()) {
            final Map.Entry pair = (Map.Entry)it.next();
            if(pair.getKey().toString().contains(".pdf")) {

                System.out.println("////PDF display name : " + pair.getKey());
                System.out.println("////PDF URL : " + pair.getValue());
                ClickableSpan clickableSpan = new ClickableSpan() {
                    @Override
                    public void onClick(View textView) {
                        webView.getSettings().setSupportZoom(true);
                        webView.getSettings().setJavaScriptEnabled(true);
                        webView.loadUrl(pair.getValue().toString());
                    }

                    public void updateDrawState(TextPaint ds) {// override updateDrawState
                        ds.setUnderlineText(true); // set to false to remove underline
                        ds.setColor(Color.RED);
                    }
                };

                int startingPosition = formattedString.toString().indexOf(pair.getKey().toString());
                int endingPosition = formattedString.toString().indexOf(pair.getKey().toString()) + pair.getKey().toString().length();


                spannableString.setSpan(clickableSpan, startingPosition, endingPosition, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }

        }

        messageText.setText(spannableString);
    }
    messageText.setLinksClickable(true);
    messageText.setMovementMethod(LinkMovementMethod.getInstance());
...