Ресурс не найден TextView

Я делаю свои первые шаги в Android и начинаю с очень простого приложения, которое отслеживает ход выполнения вязания и показывает инструкции для соответствующей строки.

Я хочу обновить пару объектов TextView программно. Однако использование getViewById (), кажется, не идентифицирует их должным образом, и приложение вылетает.

При поиске в Google, кажется, иногда возникают проблемы с пространством имен XML в макете XML, но мое выглядит нормально. Это как-то связано с областью, возможно?

инструкция.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 / layout / 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]

Большое спасибо за вашу помощь.

18
задан Tom Sutch 30 August 2010 в 23:54
поделиться

1 ответ

mRow — целое число. Когда вы вызываете setText(mRow) в строке 75, он думает, что вы пытаетесь установить текст с ресурсом String с ID = значение mRow.

Вместо этого сделайте:

tRow.setText(Integer.toString(mRow));
85
ответ дан 30 November 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: