不要连接使用 setText 显示的文本。将资源字符串与占位符一起使用

Posted

技术标签:

【中文标题】不要连接使用 setText 显示的文本。将资源字符串与占位符一起使用【英文标题】:Do not concatenate text displayed with setText. Use resource string with placeholders 【发布时间】:2016-05-08 21:44:55 【问题描述】:

我是android开发的新手, 我想setText一个号码,我正面临这个问题并尝试了所有可能的方法来解决它。

请提供解决此问题的代码

代码如下:

public class GameActivity extends Activity implements View.OnClickListener
    int correctAnswer;
    Button buttonObjectChoice1;
    Button buttonObjectChoice2;
    Button buttonObjectChoice3;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //here we initialize all our varibles
    int partA = 9;
    int partB = 2;
    correctAnswer = partA * partB;
    int wrongAnswer1 = correctAnswer - 1;
    int wrongAnswer2 = correctAnswer + 1;
    TextView textObjectPartA = (TextView)findViewById(R.id.textPartA);
    TextView textObjectPartB = (TextView)findViewById(R.id.textPartB);
    buttonObjectChoice1 = (Button)findViewById(R.id.buttonChoice1);
    buttonObjectChoice2 = (Button)findViewById(R.id.buttonChoice2);
    buttonObjectChoice3 = (Button)findViewById(R.id.buttonChoice3);
    textObjectPartA.setText("" + partA);
    textObjectPartB.setText("" + partB);
    buttonObjectChoice1.setText("" + correctAnswer);
    buttonObjectChoice2.setText("" + wrongAnswer1);
    buttonObjectChoice3.setText("" + wrongAnswer2);
    buttonObjectChoice1.setOnClickListener(this);
    buttonObjectChoice2.setOnClickListener(this);
    buttonObjectChoice3.setOnClickListener(this);

最后 8 行到最后 4 行的错误。

【问题讨论】:

问题的屏幕截图,这将使一切清楚我所面临的i.stack.imgur.com/nVdSz.png 您需要使用字符串而不是“硬编码文本”。 继续您的工作,这仅在您需要翻译您的应用时才重要。 【参考方案1】:

解决问题的简单方法是:

textObjectPartA.setText(String.valueOf(partA));
textObjectPartB.setText(String.valueOf(partB));
buttonObjectChoice1.setText(String.valueOf(correctAnswer));
buttonObjectChoice2.setText(String.valueOf(wrongAnswer1));
buttonObjectChoice3.setText(String.valueOf(wrongAnswer2));

android studio 建议你的是,如果你想在你的文本视图中附加一些东西,那么你必须使用占位符。

使用占位符的例子如下:

文件:strings.xml

...
<string name="part_a">part a value = %1$s.</string>
...

文件:activity_main.xml

...
<TextView
    android:id="@+id/R.id.textPartA"
    android:layout_
    android:layout_
    android:text="@string/part_a" />
...

文件名:GameActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //here we initialize all our varibles
    int partA = 9;
    int partB = 2;
    correctAnswer = partA * partB;
    int wrongAnswer1 = correctAnswer - 1;
    int wrongAnswer2 = correctAnswer + 1;
    TextView textObjectPartA = (TextView)findViewById(R.id.textPartA);
    TextView textObjectPartB = (TextView)findViewById(R.id.textPartB);
    buttonObjectChoice1 = (Button)findViewById(R.id.buttonChoice1);
    buttonObjectChoice2 = (Button)findViewById(R.id.buttonChoice2);
    buttonObjectChoice3 = (Button)findViewById(R.id.buttonChoice3);

    Resources res = getResources();
    String partA_text = String.format(res.getString(R.string.part_a), partA);
    textObjectPartA.setText(partA_text );
...

我希望这能消除你的疑虑。 Formatting strings: android developer

【讨论】:

为什么我们需要Resources res = getResources();?我试图在没有它的情况下运行代码并且工作正常,这会有什么后果吗?【参考方案2】:

警告禁止在 setText() 方法内连接(连接)字符串。当您分配整数值时,最好的方法如下textObjectPartA.setText(String.valueOf(partA));

【讨论】:

【参考方案3】:

尝试创建一个包含您的字符串的变量。然后使用变量作为您的文本。 喜欢:String partA_to_text= ""+partA.toString

【讨论】:

以上是关于不要连接使用 setText 显示的文本。将资源字符串与占位符一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 setText 设置和获取“评论”文本?

android textview 每行显示多少字就分行

在 JLabel 中打印句子

setText 没有将文本设置为 EditText

Android TextView控件显示Html文本,并引用的资源文件String。

Qt中遇到QLineEdit设置文本setText时程序崩溃