找不到资源TextView

时间:2010-08-30 23:54:06

标签: android textview

我正在迈出Android的第一步,我开始使用一个非常简单的应用程序,通过编织模式跟踪进度,并显示相关行的说明。

我想以编程方式更新几个TextView对象。但是,使用getViewById()似乎无法正确识别它们并且应用程序崩溃。

在Google上进行搜索后,布局XML中的XML命名空间有时会出现问题,但我看起来还不错。这可能与范围有关吗?

instructions.java (这是唯一的活动)

package uk.co.oketchup.blanketsquare;

import android.app.Activity;
import android.os.Bundle;
import android.content.SharedPreferences;
import android.widget.Button;
import android.widget.TextView;
import android.view.View.OnClickListener;
import android.view.View;

public class instructions extends Activity
{
    private int mRow;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        /* retrieve row from shared preferences, or start from zero if nothing there */
        SharedPreferences settings = getPreferences(MODE_PRIVATE);
        mRow = settings.getInt("row",0);

        setContentView(R.layout.main);

        /* associate onClick listeners with the two buttons */
        final Button btnIncrement = (Button) findViewById(R.id.increment);
        btnIncrement.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                // Increment row
                ++mRow;
                calcAndUpdate();
            }
        });

        final Button btnDecrement = (Button) findViewById(R.id.decrement);
        btnDecrement.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                // Decrement row
                --mRow;
                calcAndUpdate();
            }
        });
    }

  private void calcAndUpdate() {
    String Instructions;
    int knit1;
    int knit2;
    int remaining;

    if (mRow%2 == 1 )
      {
        /* Odd row */
        knit1 = 40 - mRow;
        Instructions = "K" + knit1;
        remaining = knit1;
      }
      else
      {
        /* Even row */
        knit1 = 18 - mRow/2;
        knit2 = knit1 + 1;
        Instructions = "Sl 1, k" + knit1 + ", [sl 1 kwise] 2 times, k1, p2sso, k" + knit2;
        remaining = knit1 + knit2 + 2;
      }

    /* Update the display */
    TextView tRow = (TextView) findViewById(R.id.row);
    TextView tInstr = (TextView) findViewById(R.id.instr);
    TextView tStRem = (TextView) findViewById(R.id.stitchremain);

    /* Set the text */
    tRow.setText(mRow);
    tInstr.setText(Instructions);
    tStRem.setText(remaining);

  }

}

/ RES /布局/的 main.xml中

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
  <TextView  
      android:id="@+id/row"
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Row"
      />
  <TextView  
      android:id="@+id/instr" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Instructions"
      android:layout_below="@id/row"
      />
  <Button
      android:id="@+id/increment"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="+"
      android:layout_alignParentBottom="true" />
  <Button
      android:id="@+id/decrement"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="-"
      android:layout_toRightOf="@id/increment"
      android:layout_alignParentBottom="true" />
  <TextView  
      android:id="@+id/stitchremain" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="stitches remaining"
      android:layout_above="@id/increment"
      />
</RelativeLayout>

TextView对象似乎已经注册,因为它们出现在 R.java

public static final class id {
    public static final int decrement=0x7f050003;
    public static final int increment=0x7f050002;
    public static final int instr=0x7f050001;
    public static final int row=0x7f050000;
    public static final int stitchremain=0x7f050004;
}

以下是ddms中显示的错误消息。

Uncaught handler: thread main exiting due to uncaught exception
android.content.res.Resources$NotFoundException: String resource ID #0x1
    at android.content.res.Resources.getText(Resources.java:200)
    at android.widget.TextView.setText(TextView.java:2813)
    at uk.co.oketchup.blanketsquare.instructions.calcAndUpdate(instructions.java:75)
    at uk.co.oketchup.blanketsquare.instructions.access$100(instructions.java:11)
    at uk.co.oketchup.blanketsquare.instructions$1.onClick(instructions.java:33)
[etc]

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:84)

mRow是一个整数。当您在第75行调用setText(mRow)时,它认为您正在尝试使用ID = mRow值的String资源设置文本。

相反,请执行:

tRow.setText(Integer.toString(mRow));

答案 1 :(得分:4)

在将其设置为textview之前,应始终将其他值转换为字符串,例如

 txtX.setText(Integer.toString(intVal));