2012-01-08 14 views
13

voglio impostare un TextView come il valore di un numero intero, si spera in questo modo:Imposta testo al valore intero

tv.setText(int) 

Ho provato questo un ottengo questo errore.

Inoltre, il mio valore intero è in un'altra classe

D/AndroidRuntime: Shutting down VM 
E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.example.application, PID: 29603 
    java.lang.IllegalStateException: Could not execute method for android:onClick 
     at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
     at android.view.View.performClick(View.java:5207) 
     at android.view.View$PerformClick.run(View.java:21168) 
     at android.os.Handler.handleCallback(Handler.java:746) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:5443) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
    Caused by: java.lang.reflect.InvocationTargetException 
     at java.lang.reflect.Method.invoke(Native Method) 
     at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
     at android.view.View.performClick(View.java:5207) 
     at android.view.View$PerformClick.run(View.java:21168) 
     at android.os.Handler.handleCallback(Handler.java:746) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:5443) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
    Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x1 
     at android.content.res.Resources.getText(Resources.java:312) 
     at android.widget.TextView.setText(TextView.java:4427) 

risposta

27

In generale,

tv.setText(String.valueOf(int)); 

Se il valore è all'interno di un'altra classe? È possibile effettuare una getter per il valore che si desidera in quella classe:

public int getValue() { 
    return value; 
} 

In modo che vi si possa accedere da l'altro:

MA se si imposta un TextView ad un int, lo farà essere interpretato come Android ID risorsa. Se si desidera il valore di int come testo (e non la risorsa a cui punta), impostarlo prima su String.

tv.setText(String.valueOf(theOtherClassInstance.getValue())); 

EDIT Se l'int è firstResult secondo il vostro commento qui sotto, quindi il getter diventa:

public int getFirstResult() { 
    return firstResult; 
} 
+0

quindi in questo caso, il numero intero è "firstResult", dovrei impostare "public int getValue () {"to public int getValue (firstResult) {:? – MiKenning

+0

No, non è necessario passare alcuna informazione in getValue() - restituisce un intero e un solo numero intero. Quindi hai solo bisogno di getValue() :) – Eilidh

+0

come fa allora a sapere il valore del mio intero? – MiKenning

21

Facendo setText (int) si sta riferendo ad una risorsa applicazione dalle file XML, non il valore stesso.

Per impostare il numero intero propertly effettuare le seguenti operazioni:

tv.setText(""+integer); 

o migliore soluzione:

tv.setText(String.valueOf(integer));