【问题标题】:Why onClick() Method of ClickableSpan is called twice in android为什么在android中两次调用ClickableSpan的onClick()方法
【发布时间】:2016-07-14 07:50:40
【问题描述】:

onClick 方法被调用了两次,所以当从SecondActivity.class 返回时,它会再次重新加载它。我有一个名为postTextViewTextView,其中See More 是可点击的。

在哪里: R.string.readMore = See More.

这是我使用的代码。

String mTitleBody = Html.fromHtml(postBodyText).toString().substring(0, 150).trim();

mTitleBody = mTitleBody.concat("..." + mContext.getResources().getString(R.string.readMore)).replaceAll("<img.+?>|<IMG.+?>", "").replaceAll("\n", "<br/>");
int index1 = Html.fromHtml(mTitleBody).toString().trim().length() -
        mContext.getResources().getString(R.string.readMore).length();
int index2 = Html.fromHtml(mTitleBody).toString().trim().length();

postTextView.setTextIsSelectable(true);
postTextView.setMovementMethod(LinkMovementMethod.getInstance());
postTextView.setText(Html.fromHtml(mTitleBody), TextView.BufferType.SPANNABLE);
Spannable mySpannable = (Spannable) postTextView.getText();
ClickableSpan myClickableSpan = new ClickableSpan() {
    @Override
    public void onClick(View view) {
      Log.d("FirstClass", "onClick");

      Intent intent = new Intent(mContext, SecondActivity.class);
      (mContext).startActivity(intent);
      ((Activity) mContext).overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);

    }

    @Override
    public void updateDrawState(TextPaint ds) {
      super.updateDrawState(ds);
      ds.setUnderlineText(false);
      ds.setColor(ContextCompat.getColor(mContext, R.color.body_text_3));
    }
};
mySpannable.setSpan(myClickableSpan, index1, index2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

谁能帮帮我,在此先感谢。

【问题讨论】:

  • 源代码在哪里?用什么方法?
  • 转储您的跨度以确保它们没有重复:TextUtils#dumpSpans()
  • 你是如何解决这个问题的?即使我现在也遇到同样的问题。

标签: android textview


【解决方案1】:

如果您在 TextView 中使用 autolink 属性,那么您需要在设置移动方法后将 TextView 设置为不可聚焦。

为此,在postTextView.setMovementMethod(LinkMovementMethod.getInstance()); 之后添加以下行:

postTextView.setFocusable(false);

Android setMovementMethod 文档的第二段中有解释:

为此设置用于处理箭头键移动的 MovementMethod 文本视图。这可以为 null 以禁止使用箭头键移动 光标或滚动视图。

请注意,如果您想要一个带有关键监听器或移动的 TextView 方法不可聚焦,或者如果您想要一个没有键的 TextView 监听器或移动方法是可聚焦的,你必须调用 View.setFocusable(boolean) 在调用它之后再次获取 以您想要的方式返回焦点。

文档链接: https://developer.android.com/reference/android/widget/TextView#setMovementMethod(android.text.method.MovementMethod)

【讨论】:

  • 是的,它解决了双重调用onClick 的问题。但是如何保持 TextView 中的文本可选择?
【解决方案2】:

我遇到了同样的问题,这是因为我在各自的视图中有 "autolink: true" 属性,删除它有帮助。

【讨论】:

    猜你喜欢
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多