2010-08-30 124 views
18

我正在採取我在Android的第一步,並從一個非常簡單的應用程序,通過針織模式跟蹤進度,並顯示相關行的說明。資源未找到TextView

我想以編程方式更新幾個TextView對象。但是,使用getViewById()似乎沒有正確識別它們,並且應用程序崩潰。

在Google上搜索時,似乎XML格式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); 

    } 

} 

<?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的爲已經註冊好的AS/RES /佈局/ main.xml中它們出現在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] 

非常感謝您的幫助。

回答

78

mRow是一個整數。當您在第75行調用setText(mRow)時,它認爲您嘗試使用ID = mRow值的String資源設置文本。

相反,這樣做:

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

這是固定的, - 非常感謝! – 2010-08-31 08:09:47

+0

嘿被困在相同的概率!謝謝 ! +1 – GoodSp33d 2011-01-02 14:31:03

+0

感謝:D +1 – jtwigg 2013-02-13 16:49:52

4

應該始終將其設置爲TextView的轉換之前將其它值字符串,如

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