2017-12-31 37 views
0

この作品を働いていない:変数/リソース連結トーストに

Toast.makeText(getApplicationContext(), attemptsRemainingCount.toString(), Toast.LENGTH_LONG).show(); 

はこの作品:

Toast.makeText(getApplicationContext(), R.string.attemptsRemaining, Toast.LENGTH_LONG).show(); 

このしかし、動作しません:

Toast.makeText(getApplicationContext(), attemptsRemainingCount.toString() + R.string.attemptsRemaining, Toast.LENGTH_LONG).show(); 

それは私を与えるすべてがあります長い番号。誰かが私がここの連結で間違っていることを教えてもらえますか?

答えて

2

Java変数をリソース識別子と連結しています。 ()(attemptsRemainingCount.toString、getApplicationContext()+ getResources()のgetString(R.string.attemptsRemaining)、Toast.LENGTH_LONG。)

Toast.makeText .SHOW();:

次使用してみてください

makeText(Context context, CharSequence text, int duration)

そして、あなたの第二の例は、resIdまたはリンクされたリソースIDのバージョン使用されています:

+0

ああ、意味があります。あなたの提案をありがとう。 :) – BoshJailey

0

あなたの最初の例では、順番にmakeTextCharSequenceバージョンを呼び出すCharSequenceを使用していますmakeText(Context context, int resId, int duration)

これは、2つの例仕事。

あなたが望むのは、両方の組み合わせです。つまり、リンクされたリソースIDをStringに変換して連結し、CharSequenceメソッドを使用する必要があります。例えば、そのよう:

Toast.makeText(getApplicationContext(), 
    attemptsRemainingCount.toString() + 
    getResources().getString(R.string.attemptsRemaining), 
    Toast.LENGTH_LONG).show(); 
0

最初の2行は同じように見えるかもしれないが、彼らはToast.makeTextの異なるオーバーロードバージョンを使用します。最初はthe CharSequence version(文字列が指定されているため)を使用し、2番目の文字はthe int versionを使用します(整数リソースIDが与えられているため)

文字列をリソースIDリソースIDは、文字列に変換

代わりにあなたはフォーマット文字列(You have %1$d attempts left)に文字列リソースを作成し、使用する必要があります。。

getResources().getString(R.string.attemptsRemaining, attemptsRemainingCount); 

をフォーマットされた文字列を取得するには完全な詳細についてはthe string resources documentationセクションFormatting stringsを参照してください。 。

文字列リソース内の書式文字列が単純に固定文字列と連結された場合の利点は、前者が数字が同じ場所にない可能性がある他の言語に簡単に変換できることです。