3

バックグラウンド

textView 内でいくつかの URLSpan を使用したかったので、次のようなものを使用しました。

final Spanned spanned=Html.fromHtml(getString(R.string.test));
msgTextView.setText(spanned);

問題

機能しますが、アイテムをクリックするとクリックされたままになります。まだリンクに触れているようです...

私が試したこと

textView からフォーカスをクリアし、別のビューにフォーカスを設定しようとしましたが、どれも役に立ちませんでした。

また、クリックされるたびに UrlSpan を削除して代わりに新しいものを追加しようとしましたが、うまくいきませんでした。コードは次のとおりです。

  public static Spannable setOnLinkClickedListener(final Spanned original,final IOnLinkClickListener listener)
    {
    final SpannableString result=new SpannableString(original);
    final URLSpan[] spans=result.getSpans(0,result.length(),URLSpan.class);
    for(final URLSpan span : spans)
      {
      final int start=result.getSpanStart(span);
      final int end=result.getSpanEnd(span);
      final int flags=result.getSpanFlags(span);
      result.removeSpan(span);
      final String url=span.getURL();
      result.setSpan(new CustomURLSpan(url,start,result,end,listener,flags),start,end,flags);
      }
    return result;
    }

  private static final class CustomURLSpan extends URLSpan
    {
    private final int                  _start;
    private final SpannableString      _result;
    private final String               _url;
    private final int                  _end;
    private final IOnLinkClickListener _listener;
    private final int                  _flags;

    private CustomURLSpan(final String url,final int start,final SpannableString result,final int end,final IOnLinkClickListener listener,final int flags)
      {
      super(url);
      _start=start;
      _result=result;
      _url=url;
      _end=end;
      _listener=listener;
      _flags=flags;
      }

    @Override
    public void onClick(final View widget)
      {
      if(_listener==null||!_listener.onClick(widget,_url))
        super.onClick(widget);
      _result.removeSpan(this);
      _result.setSpan(new CustomURLSpan(_url,_start,_result,_end,_listener,_flags),_start,_end,_flags);
      }
    }

質問

クリックされるたびに URLSpan に残る選択/クリック効果をクリアするにはどうすればよいですか?

4

3 に答える 3

0

以前も同じ問題がありました。おそらく、使用している textView の android:textIsSelectable 属性が原因です。それを削除するか、false に設定すると解決されます。

于 2014-04-15T11:07:13.730 に答える