2010-08-30 48 views
18

Tôi đang thực hiện các bước đầu tiên của mình trong Android và bắt đầu bằng ứng dụng rất đơn giản theo dõi tiến trình thông qua mẫu đan và hiển thị hướng dẫn cho hàng liên quan.Tài nguyên không tìm thấy TextView

Tôi muốn cập nhật một vài đối tượng TextView theo chương trình. Tuy nhiên, việc sử dụng getViewById() dường như không nhận dạng chúng đúng cách và ứng dụng gặp sự cố.

Sau khi tìm kiếm trên Google, có vẻ như đôi khi có vấn đề với không gian tên XML trong XML bố cục nhưng có vẻ OK. Nó có liên quan gì đến phạm vi không?

instructions.java (đây là hoạt động duy nhất)

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> 

Các TextView đối tượng dường như đã được đăng ký ok như chúng xuất hiện trong 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; 
} 

Đây là thông báo lỗi được hiển thị bằng 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] 

Rất cám ơn sự giúp đỡ của bạn.

Trả lời

78

mRow là số nguyên. Khi bạn gọi setText (mRow) trên dòng 75, nó nghĩ rằng bạn đang cố gắng thiết lập văn bản bằng một tài nguyên String với ID = giá trị của mRow.

Thay vào đó, làm:

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

Đó là cố định nó - cảm ơn rất nhiều! –

+0

Hey đã bị mắc kẹt trong cùng một prob! cảm ơn ! +1 – GoodSp33d

+0

Cảm ơn vì điều này: D +1 – jtwigg

4

Bạn luôn có nên chuyển đổi các giá trị khác để chuỗi trước khi thiết lập nó để TextView, như

txtX.setText(Integer.toString(intVal)); 
Các vấn đề liên quan