簡體   English   中英

從另一個Java類重寫此類中的方法(附加到其他方法)

[英]Override method (append to other methods) in this class from another java class

我想為另一個類的TextView設置ClickableSpan ClickableSpan我需要重寫兩個方法, updateDrawState()onClick() 前一種方法對於所有TextViews都是相同的,但是后一種方法onClick()對於任何TextView都是不同的。 所以我只想一次(在Commons類中 )編寫updateDrawState()方法,而不是任何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並僅實現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
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM