【发布时间】:2016-01-27 10:08:46
【问题描述】:
内容从服务器传送到我的应用程序,有时内容包含 tel: 或 mailto: 超链接。目前我使用 html.fromhtml() 和 setMovementMethod 使 textview 链接可点击:
((TextView) findViewById(R.id.c_data)).setText(Html.fromHtml(HTML_out));
((TextView) findViewById(R.id.c_data)).setMovementMethod(LinkMovementMethod.getInstance());
这很有效,允许用户打开邮件链接、电话链接和其他任何东西。
问题是当他们点击链接时它会关闭我的应用程序,所以如果他们从手机或电子邮件点击返回,它会将他们带回主屏幕而不是我的应用程序。
据我所知,当由于某种原因单击链接时,会调用 onStop。如何避免这种情况,以便在通话/发送电子邮件后立即重新打开应用程序?
示例数据:
<b>Title1</b><a href="tel:44#######">(44#) ###-####</a>
<b>Title2</b><a href="mailto:test@gmail.com">test@gmail.com</a>
<b>Title3</b><a href="google.ca">google.ca</a>
编辑: 我尝试使用意图:
((TextView) findViewById(R.id.cust_data)).setText(Html.fromHtml(HTML_out));
//((TextView) findViewById(R.id.cust_data)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.cust_data)).setMovementMethod(new MovementMethod() {
@Override
public void initialize(TextView widget, Spannable text) {
//Log.i("Test click","Good");
}
@Override
public boolean onKeyDown(TextView widget, Spannable text, int keyCode, KeyEvent event) {
return false;
}
@Override
public boolean onKeyUp(TextView widget, Spannable text, int keyCode, KeyEvent event) {
//Log.i("Test click","Good");
return false;
}
@Override
public boolean onKeyOther(TextView view, Spannable text, KeyEvent event) {
//Log.i("Test click","Good");
return false;
}
@Override
public void onTakeFocus(TextView widget, Spannable text, int direction) {
}
@Override
public boolean onTrackballEvent(TextView widget, Spannable text, MotionEvent event) {
return false;
}
@Override
public boolean onTouchEvent(TextView widget, Spannable text, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
Log.i("Test click", text.toString());
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:0123456789"));
startActivity(intent);
return true;
} else {
return false;
}
}
@Override
public boolean onGenericMotionEvent(TextView widget, Spannable text, MotionEvent event) {
return false;
}
@Override
public boolean canSelectArbitrarily() {
return false;
}
});
只是为了发短信,我使用了一个静态电话号码。之后这仍然不会让我回到我的应用程序。
【问题讨论】:
-
您可能应该将其更改为打开链接的意图,如果这不起作用,那么 startActivityForResult() 可能会这样做,因为它会期望收到一些东西。
-
我会使用静态点击意图来打开电子邮件或电话,但每个用户的数据都会有所不同。所以我不能只用链接制作一个静态视图。我错过了什么吗?
-
遵循 Cody 建议的第一部分。那应该行得通。不管是什么,都不需要制作“静态视图”。
-
@theshadow124 你能提供更多你的代码吗?我也不明白您所说的“静态视图”是什么意思。如果您担心文本会发生变化,那也没关系。
-
当我说静态视图时...我应该说专用。我有一个视图,然后我使用用户设置的 HTML 数据加载。可能有很多链接。如何在 textview 上设置意图以打开多种不同类型的链接?
标签: android android-activity hyperlink