【问题标题】:Override method (append to other methods) in this class from another java class从另一个 java 类覆盖该类中的方法(附加到其他方法)
【发布时间】:2018-03-09 15:32:21
【问题描述】:

我想为另一个班级的TextView 设置ClickableSpan。在ClickableSpan 中,我需要覆盖updateDrawState()onClick() 这两个方法。前一种方法对所有TextViews 都相同,但后者onClick() 对任何TextView 都不同。所以我只想写一次updateDrawState() 方法(在Commons 类 中),而不是任何TextView。我怎样才能做到这一点?

以下代码块清楚地解释了我想要什么:

public class Commons {
    ...
    public void makeSpannable(TextView tv, String text, int startIndex, int endIndex, ClickableSpan appendClickableSpan) {
        SpannableString span = new SpannableString(text);
        span.setSpan({
        @Override
        public void updateDrawState(TextPaint ds) {
            ds.setColor(ContextCompat.getColor(Activation.this, R.color.textViewClickable));
            ds.setUnderlineText(false);

            appendClickableSpan;

        }}, startIndex, endIndex, 0);
        tv.setMovementMethod(LinkMovementMethod.getInstance());
        tv.setText(span, TextView.BufferType.SPANNABLE);
    }
    ...
}

public class Main {
    ...
    TextView textView = findViewById(R.id.textView1);
    String text = "some sample text";
    new Commons().makeSpannable(textView, text, 2, 6, new ClickableSpan() {
        @Override
        public void onClick(View widget) {
            if (validator.checkValidation(tilCode)) ResendActivationEmail();
        }
    });
    ...
}

【问题讨论】:

    标签: java android textview spannable


    【解决方案1】:

    我不确定,如果我理解正确的话,但你可能想要创建updateDrawState 方法和几个onClick 的通用实现。

    您可以通过创建抽象类来扩展 ClickableSpan 并只实现 updateDrawState,如下所示:

    public abstract class MyClickableSpan extends ClickableSpan {
        @Override
        public void updateDrawState(TextPaint ds) {
            // Your custom implementation
        }
    }
    

    然后像这样使用它:

    ClickableSpan clickableSpan = new MyClickableSpan() {
        @Override
        public void onClick(View widget) {
            // Your custom implementation
        }
    };
    

    如果你坚持Commons 类,我可能将方法设为静态:

    public class Commons {
        public static void makeTextViewSpannable(TextView tv, String text, int startIndex, int endIndex, MyClickableSpan span) {
            SpannableString spannableString = new SpannableString(text);
            spannableString.setSpan(span, startIndex, endIndex, 0);
            tv.setMovementMethod(LinkMovementMethod.getInstance());
            tv.setText(spannableString, TextView.BufferType.SPANNABLE);
        }
    }
    

    用法:

    Commons.makeTextViewSpannable(textView, text, startIndex, endIndex, new MyClickableSpan() {
        @Override
        public void onClick(View widget) {
            // Your custom implementation
        }
    });
    

    【讨论】:

    • 这正是我想要的。
    猜你喜欢
    • 2017-02-27
    • 1970-01-01
    • 2023-04-10
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多