为什么ClickableSpan的onClick()方法在android中被调用两次

Pri*_*one 3 android textview

onClick方法被调用两次,因此当从SecondActivity.class它返回时将再次重新加载它。我有一个可点击的TextView命名。postTextViewSee 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);
Run Code Online (Sandbox Code Playgroud)

任何人都可以在这里帮助我,提前谢谢。

小智 6

如果您在 TextView 中使用自动链接属性,则需要在设置移动方法后将 TextView 设置为不可聚焦。

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

postTextView.setFocusable(false);
Run Code Online (Sandbox Code Playgroud)

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

设置用于处理此 TextView 的箭头键移动的 MovementMethod。该值可以为空,以禁止使用箭头键移动光标或滚动视图。

请注意,如果您希望具有关键侦听器或移动方法的 TextView 不具有焦点,或者希望不具有关键侦听器或移动方法的 TextView 具有焦点,则必须在调用此方法后再次调用 View.setFocusable(boolean)使聚焦能力恢复到您想要的方式。

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


Tin*_*825 5

我遇到了完全相同的问题,这是因为我在相应视图中具有“autolink:true”属性,删除它会有所帮助。