ClickableSpan-类不是抽象的,并且不覆盖抽象方法

时间:2018-10-30 13:44:11

标签: java android

我是Android开发的新手。自从尝试添加用于打开弹出窗口(onClick())的选项以来,我一直收到此错误。

该错误看起来在第29-> 36行,因为我在注释掉该部分后没有收到此错误。

任何人都知道发生了什么事吗?

我的代码:

import android.content.Intent;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.view.View;
import android.widget.TextView;


public class Login extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        TextView textView = findViewById(R.id.PrivacyPolicyConfirmation);

        String text = "I hereby confirm to have read and understood the Privacy Policy";

        SpannableString checkBoxSS = new SpannableString(text);

        ClickableSpan clickableSpanPrivacyPolicy = new ClickableSpan() {
            @Override
            public void updateDrawState(TextPaint ds) {
                super.updateDrawState(ds);
                ds.setColor(Color.BLUE);
                ds.setUnderlineText(true);
            }
        };

        checkBoxSS.setSpan(clickableSpanPrivacyPolicy, 49, 63, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        textView.setHighlightColor(Color.TRANSPARENT);
        textView.setText(checkBoxSS);
        textView.setMovementMethod(LinkMovementMethod.getInstance());

        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(Login.this, PopUpPrivacy.class));
            }
        });

    }
}

2 个答案:

答案 0 :(得分:1)

ClickableSpan类是一个抽象类,这意味着某些方法已定义但未实现。在您的情况下,您尚未实现抽象的onClick()方法,这就是您收到错误的原因。因此,您需要像这样声明onClick()方法:

ClickableSpan clickableSpanPrivacyPolicy = new ClickableSpan() {
    @Override
    public void updateDrawState(TextPaint ds) {
        super.updateDrawState(ds);
        ds.setColor(Color.BLUE);
        ds.setUnderlineText(true);
    }

    @Override
    public void onClick(View widget) {
        // Do something
    }
};

答案 1 :(得分:0)

您的匿名ClickableSpan类必须实现onClick(View view)或声明为抽象:

ClickableSpan clickableSpanPrivacyPolicy = new ClickableSpan() {
    @Override
    public void updateDrawState(TextPaint ds) {
        super.updateDrawState(ds);
        ds.setColor(Color.BLUE);
        ds.setUnderlineText(true);
    }
    @Override
    public void onClick(View v){ }
};