0

所以我有这个Activity Btextview。要显示到 textview 中的字符串来自我之前的 Activity A(包含多个记录/Passed thru Bundle 的结果查询)

我的问题是如何让每条记录都可以点击?请注意,在我的 Activity B 中,我只有一个 textview 用于Activity A中的字符串。我希望每个单词都是可点击的,然后它将进入相应的活动。

仅供参考, 这是选定的

在此处输入图像描述

更新:

结果类

     @Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.symptomsresult);

    result = (TextView) findViewById (R.id.tvSymptomResult);

    Bundle extras = getIntent().getExtras();
       if (extras != null) {
            String value = extras.getString("results");
            result.setText(value);
            }
            else{

            }

}

症状类

   String[] symptoms = alSymptoms.toArray(new String[alSymptoms.size()]);

        String c = dbHelper.getData(symptoms);

        final int result = 1;
        Bundle extras = new Bundle();
        Intent i = new Intent(this, SymptomsResult.class);
        extras.putString("results", c);
        i.putExtras(extras);
        startActivityForResult(i, result);

DBHelper.class

     public String getData(String[] symptoms) {
    String where = KEY_SYMPTOMS + "= ?";
    String orStr = " OR "; /* Maybe " AND "? */

    StringBuilder builder = new StringBuilder(where);
    for(int i = 1; i < symptoms.length; i++)
        builder.append(orStr).append(where);

    String search = "";
    Cursor c = myDataBase.query(true, DB_TABLE, new String[] 
            {KEY_CONDITIONS}, builder.toString(), symptoms, null, null, null, null);

    c.moveToFirst();

    while (c.isAfterLast() == false) {
        search += c.getString(0) + ", ";
        c.moveToNext();
    }

    return search;

}


任何帮助表示赞赏。谢谢!

4

2 回答 2

1

您可以将HTML href其用作文本的值,然后添加此行以使其显示为网络链接

txtView.setMovementMethod(LinkMovementMethod.getInstance());

您可以通过使用自定义链接来打开您的活动scheme

示例代码:

txtView.setText(Html.fromHtml(String.format("<a href='%s://%s'>%s</a>", 
                                                           schema,action,text)));

对于单击此链接时要打开的活动,您必须在manifest

<intent-filter>
    <category android:name="android.intent.category.DEFAULT"/>
    <action android:name="android.intent.action.VIEW" />
    <data
       android:host = "YOUR_ACTION"
       anroid:scheme="YOUR_SCHEME" />
</intent-filter>

这里的技巧是您正在创建自定义 URL,而不是host您有一个可以设置为启动不同活动的操作。请注意,action/hostandscheme可以是任意字符串,只要它们与您在创建链接时使用的值匹配即可

因此,当您单击带有此类链接的文本时,它将调用匹配的活动scheme/host

我在与您的情况非常相似的情况下使用此解决方案,并且运行良好。

于 2013-03-01T20:12:16.267 回答
1

您可以使用Linkify类和Spannables来做到这一点。但我相信ListView是一个更好的选择,这些项目更容易点击,因为它们更大,而且这种方法有更多的文档。

您仍然可以使用我编写的代码,getData()但不要将光标转换为字符串,而是将光标传递给 SimpleCursorAdapter。


那么如何将它们放在列表视图中?

getData()像这样修改:

public Cursor getData(String[] symptoms) {
    String where = KEY_SYMPTOMS + "= ?";
    String orStr = " OR "; /* Maybe " AND "? */

    StringBuilder builder = new StringBuilder(where);
    for(int i = 1; i < symptoms.length; i++)
        builder.append(orStr).append(where);

    return myDataBase.query(true, DB_TABLE, new String[] 
            {"rowid as _id", KEY_CONDITIONS}, builder.toString(), symptoms, null, null, null, null);
}

然后将此 Cursor 传递给 CursorAdapter 并将其绑定到 ListView:

String[] fromColumns = {DBAdapter.KEY_CONDITIONS};
int[] toViews = {android.R.id.text1}; // The TextView in simple_list_item_1

setListAdapter(new SimpleCursorAdapter(this, 
        android.R.layout.simple_list_item_1, getData(symptoms),
        fromColumns, toViews, 0));

(我在这里做了一些假设,但这是如何将 Cursor 绑定到 ListActivity。)

于 2013-03-01T20:13:58.227 回答