web-dev-qa-db-ja.com

setMessage()を使用してAlertDialogに複数行のテキストと変数を表示する

警告ダイアログに複数行のテキストを表示する必要があります。複数のsetMessage()メソッドを使用する場合、以下に示すように、最後のsetMessageのみが表示されます。

final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
                alertDialog.setTitle("Statistics:");
                alertDialog.setMessage("No. of attempts: " + counter);
                alertDialog.setMessage("No. of wins: " + counterpos);
                alertDialog.setMessage("No. of losses: " + counterneg);

ダイアログでこれらのそれぞれに新しい行を作成する方法はありますか? System.print.out()で\ nを使用するのと同様です。方法。

ありがとう!

34
Navigatron

このようなことができます

String alert1 = "No. of attempts: " + counter;
String alert2 = "No. of wins: " + counterpos;
String alert3 = "No. of losses: " + counterneg;
alertDialog.setMessage(alert1 +"\n"+ alert2 +"\n"+ alert3);   
73
Kenny C

表示したいすべての文字列を1つ作成し、改行する場所に「\ n」を追加できます。

alertDialog.setMessage("No. of attempts: " + counter + "\n" + 
            "No. of wins: " + counterpos + "\n" + 
            "No. of losses: " + counterneg);

または、StringBuilderを使用することをお勧めします。

StringBuilder sb = new StringBuilder();
sb.append("No. of attempts: " + counter);
sb.append("\n");
sb.append("No. of wins: " + counterpos);
sb.append("\n");
sb.append("No. of losses: " + counterneg);
alertDialog.setMessage(sb.toString());

そして、それを行う最善の方法は、静的テキストを(strings.xmlファイル内の)文字列リソースに抽出することです。 %d(intではなく文字列を挿入する場合は%s)を使用して、適切な場所で動的な値を取得します。

<string name="alert_message">No. of attempts: %1$d\nNo. of wins: %2$d\nNo. of losses: %3$d</string>

そして、コードで:

String message = getString(R.string.alert_message, counter, counterpos, counterneg);
alertDialog.setMessage(message);
23
TofferJ

また、strings.xmlファイルに改行を直接挿入することもできます。

<string name="my_string_text">This would revert your progress.\n\n Are you sure you want to proceed?</string>

12
shooley

Kotlinは次の方法でソリューションを簡素化します。

  • setメソッドの呼び出しをチェーンする
  • 補間された文字列を使用する

次のように:

"AlertDialog.BuilderこのBuilderオブジェクトは、設定メソッドへの呼び出しのチェーンを可能にします"( https://developer.Android.com/reference/Android/app/AlertDialog.Builder

    fun alertDemo() {
        var counter: Int = 5

        var counterpos: Int = 2
        var counterneg: Int = 3
        val builder = AlertDialog.Builder(this)
            .setTitle("Statistics:")
            .setMessage("""
                |number of
                |
                |attempts: $counter
                |wins: $counterpos
                |losses: $counterneg
                """.trimMargin())
            .show()
    }

結果のスクリーンショットを用意しましたが、ここで新しいので、スクリーンショットのアップロードはより高いレベルのコミュニティピアに制限される可能性があることを知ったようです。または私は何かを見逃しましたか?自分自身を(おそらくだけでなく)啓発してくれてありがとう:)

スクリーンショットは、バーを表示せずにニース形式で提供されます。

PS:ミニマリストの場合、連鎖により、冗長な「val builder = "

1
fridemar