Связывание части текста Alert Dialog с действием - PullRequest
0 голосов
/ 23 апреля 2020

Мне уже удалось показать AlertDialog с текстовым сообщением.
Но одно слово в тексте должно быть кликабельным и ссылка на другое действие.

Я попробовал его с помощью SpannableString, подключив это ClickableSpan, но щелчок не распознается вообще.
Ничего не происходит ...

public class TestDialog extends AppCompatDialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        String text = "This is a test message.";

        SpannableString ss = new SpannableString(text);

        ClickableSpan cs = new ClickableSpan() {
            @Override
            public void onClick(@NonNull View view) {
                System.out.println("Test");
            }
        };

        ss.setSpan(cs, 10, 14, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage(ss)
                .setTitle("Test Title")
                .setPositiveButton("Ok!", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        // do something
                    }
                })
                .setNegativeButton("No!", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        System.exit(0);
                    }
                });

        return builder.create();
    }
}

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Хорошо, я сделал это с помощью нескольких других постов здесь и видео на YouTube. Я использую пользовательский макет, который отображается в диалоге оповещений:

public class TestDialog extends AppCompatDialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        String text = "This is a test message.";

        SpannableString ss = new SpannableString(text);

        ClickableSpan cs = new ClickableSpan() {
            @Override
            public void onClick(@NonNull View view) {
                Intent test_intent = new Intent(getContext(), Test.class);
                getContext().startActivity(test_intent);
            }
        };

        ss.setSpan(cs, 10, 14, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.testview, null);

        TextView message = (TextView) view.findViewById(R.id.textView);
        message.setMovementMethod(LinkMovementMethod.getInstance());
        message.setPadding(32, 32, 32, 32);
        message.setGravity(Gravity.CENTER_HORIZONTAL);
        message.setText(ss);
        message.setTextSize(16);

        builder.setView(view)
                .setTitle("Test Title")
                .setPositiveButton("Ok!", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        // do something
                    }
                })
                .setNegativeButton("No!", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        // do something
                    }
                });

        return builder.create();
    }
}

Надеюсь, я также смогу вам помочь.

0 голосов
/ 23 апреля 2020

Во-первых, сделайте ваши текстовые HTML ссылки кликабельными, используя Html.fromHtml:

.setMessage(Html.fromHtml(text))

и, добавьте эту строку в свою активность в манифесте:

<data android:host="my.app" android:scheme="http"></data>

Затем, http://my.app должен начать вашу деятельность.

...