从另一个 java class 覆盖此 class 中的方法(附加到其他方法)
Override method (append to other methods) in this class from another java class
我想为另一个 class 的 TextView
设置 ClickableSpan
。在 ClickableSpan
中,我需要覆盖两个方法,updateDrawState()
和 onClick()
。前一种方法对所有 TextViews
都是相同的,但后者 onClick()
对任何 TextView
都是不同的。所以我只想写一次 updateDrawState()
方法(在 Commons class 中),而不是任何 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();
}
});
...
}
我不确定,如果我理解正确的话,但你可能想创建 updateDrawState
方法和几个 onClick
.
方法的通用实现
您可以通过在扩展 ClickableSpan
的地方创建抽象 class 来实现此目的,并且只实现 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
class,我可能把方法设为静态:
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
}
});
我想为另一个 class 的 TextView
设置 ClickableSpan
。在 ClickableSpan
中,我需要覆盖两个方法,updateDrawState()
和 onClick()
。前一种方法对所有 TextViews
都是相同的,但后者 onClick()
对任何 TextView
都是不同的。所以我只想写一次 updateDrawState()
方法(在 Commons class 中),而不是任何 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();
}
});
...
}
我不确定,如果我理解正确的话,但你可能想创建 updateDrawState
方法和几个 onClick
.
您可以通过在扩展 ClickableSpan
的地方创建抽象 class 来实现此目的,并且只实现 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
class,我可能把方法设为静态:
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
}
});