java - 警报对话框中的可单击文本链接以打开活动
问题描述
我希望我的警报对话框中的一个文字是可点击的,并在点击时打开一个活动。
我尝试在 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) {
// do something
}
});
return builder.create();
}
}
谢谢你的帮助!
解决方案
好的,我在这里的其他几篇文章和 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 testIntent = new Intent(getContext(), Test.class);
getContext().startActivity(testIntent);
}
};
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.test_view, null);
TextView message = (TextView) view.findViewById(R.id.textView);
message.setMovementMethod(LinkMovementMethod.getInstance());
message.setText(ss);
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();
}
}
我希望我也能帮助你。