0

だから私はこのActivity B with textviewを持っています。textview に表示される文字列は、以前のアクティビティ A (複数のレコードを含む結果クエリ/ Bundleを介して渡された) から取得されます。

私の質問は、各レコードをクリック可能にするにはどうすればよいですか? 私のアクティビティ B では、アクティビティ Aの文字列に対してテキストビューが 1 つしかないことに注意してください。各単語をクリック可能にして、対応するアクティビティに移動します。

参考までに、 これは選択された

ここに画像の説明を入力

更新しました:

結果.クラス

     @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

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);
}

次に、このカーソルを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));

(ここではいくつかの仮定をしましたが、これはカーソルをListActivityにバインドする方法です。)

于 2013-03-01T20:13:58.227 に答える
1

テキストの値として使用HTML hrefし、この行を追加してWebリンクとして表示することができます

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/hostます。scheme

したがって、そのようなリンクを含むそのテキストをクリックすると、一致するアクティビティが呼び出されますscheme/host

私はあなたと非常によく似たケースでこのソリューションを使用しており、完全に機能しています。

于 2013-03-01T20:12:16.267 に答える