为什么添加一个空字符串可以修复TextView.setText()?

时间:2018-09-21 16:31:21

标签: android

我正在尝试制作一个简单的应用,该应用在显示时增加了3个,只是混淆了一部分,这在我的手机中不起作用并显示了一些错误。

public void addThreeToTeamA(View view) {
        ScoreOfTeamA = ScoreOfTeamA + 3;
        displayScore(ScoreOfTeamA);
  }

  public void displayScore(int score){
     TextView text = findViewById(R.id.display_TeamA_score);
  text.setText(score);

这很好用

public void addThreeToTeamA(View view) {
            ScoreOfTeamA = ScoreOfTeamA + 3;
            displayScore(ScoreOfTeamA);
      }

      public void displayScore(int score){
         TextView text = findViewById(R.id.display_TeamA_score);
      text.setText("" + score);

“”在最后一行中做什么,以使应用正常工作?

这是xml文件

  <TextView
            android:id="@+id/display_TeamA_score"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/_0"
            android:textSize="48sp"
            android:textAlignment="center" />

 <Button
            android:onClick="addThreeToTeamA"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/AddThree"
            android:layout_marginLeft="14dp"
            android:layout_marginRight="14dp"
            android:textSize="18sp"
            android:textAlignment="center" />

这不是完整的代码,它只是重要的部分。

2 个答案:

答案 0 :(得分:4)

score的类型为int。您要使用的setText方法期望使用char[]类型的东西,即字符串。请注意,另一个setText方法的确希望有一个整数,该整数用于通过其ID查找资源。这就是使用setText(score)时不会出现错误的原因。

知道这一点:

  • text.setText(score);上,如果将score转换为字符串,它将起作用(例如,使用Integer.toString(score))。
  • text.setText("" + score);上,您已经有""字符串,并且Java知道您正在尝试将整数添加到字符串,因此它返回一个字符串。但是,此版本效率不高,因为每次将字符串连接到字符串时,您都在创建一个新字符串(这就是人们使用StringBuilder的原因)。

长话短说,只需将score转换为字符串即可。

答案 1 :(得分:4)

您使用的是setText()的两个不同版本:

  1. 具有整数的人:https://developer.android.com/reference/android/widgetTextView.html#setText(int)
  2. 采用CharSequence(例如字符串)的字符串:https://developer.android.com/reference/android/widget/TextView.html#setText(java.lang.CharSequence)

第一个使用资源ID 。 TextView将尝试将资源作为字符串加载。由于您提供的是任意整数,因此可能会收到“找不到资源”异常。

第二个字符采用CharSequence,并将仅显示该确切文本。

将参数更改为"" + score将创建一个包含适当字符以显示score值的字符串。