android - 找不到资源 TextView

标签 android textview

我在 Android 中迈出了第一步,并从一个非常简单的应用开始,它通过编织图案跟踪进度并显示相关行的说明。

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

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

instructions.java(这是唯一的 Activity )

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/layout/ma​​in.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]

非常感谢您的帮助。

最佳答案

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

改为:

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

关于android - 找不到资源 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3605087/

相关文章:

android - Crashlytics Android SDK - 自定义 UncaughtExceptionHandler

android - 为嵌入 SCons 的 ARM 交叉编译 Swiften 库

android - 如何使用 onScroll 和 GestureDetector 使 View 跟随我的手指 - Android

android - 一个接一个地对齐动态 TextView

android - Fragment 中的 ViewPager 在返回时丢失内容

Java移动跨平台框架

java - 在 Android 上使用 opengles 播放 YUV 视频后 Activity 困惑

java - 使用不同级别的不同字符串填充 TextView

java - Fragment Intermediate(I) :Getting input from edittext, 在 fragment 的 TextView 中设置文本

android - 如何在 Android 中突出显示 TextView