2014-09-23 7 views
15

Używam ListView do dynamicznego dodawania pól wyboru w systemie Android. Używam klasy ContextAdapter, aby dodać nadmuchać ListView. Mój dziennik błędów jest następujący:

09-23 13:44:45.000: E/AndroidRuntime(1192): FATAL EXCEPTION: main 
09-23 13:44:45.000: E/AndroidRuntime(1192): Process: com.project.attendancemanager, PID: 1192 
09-23 13:44:45.000: E/AndroidRuntime(1192): android.content.res.Resources$NotFoundException: String resource ID #0x1 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.content.res.Resources.getText(Resources.java:244) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.widget.TextView.setText(TextView.java:3888) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at com.project.attendancemanager.CustomAdapter.getView(CustomAdapter.java:31) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.widget.AbsListView.obtainView(AbsListView.java:2263) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.widget.ListView.measureHeightOfChildren(ListView.java:1263) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.widget.ListView.onMeasure(ListView.java:1175) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.view.View.measure(View.java:16497) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.widget.RelativeLayout.measureChild(RelativeLayout.java:689) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:473) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.view.View.measure(View.java:16497) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.view.View.measure(View.java:16497) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.view.View.measure(View.java:16497) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.view.View.measure(View.java:16497) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.view.Choreographer.doCallbacks(Choreographer.java:574) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.view.Choreographer.doFrame(Choreographer.java:544) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.os.Handler.handleCallback(Handler.java:733) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.os.Handler.dispatchMessage(Handler.java:95) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.os.Looper.loop(Looper.java:136) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at java.lang.reflect.Method.invoke(Method.java:515) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
09-23 13:44:45.000: E/AndroidRuntime(1192):  at dalvik.system.NativeStart.main(Native Method) 

ContextAdapter klasy wygląda następująco:

import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.CheckBox; 
import android.widget.TextView; 

public class CustomAdapter extends ArrayAdapter<ListData>{ 

    ListData[] items = null; 
    Context context; 

    public CustomAdapter(Context context, ListData[] resource) { 
     super(context, R.layout.activity_list_row, resource); 
     // TODO Auto-generated constructor stub 
     this.context = context; 
     this.items = resource; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     LayoutInflater inflator = ((Activity) context).getLayoutInflater(); 
     convertView = inflator.inflate(R.layout.activity_list_row, parent, false); 
     TextView name = (TextView) convertView.findViewById(R.id.NameTV); 
     TextView rollNo = (TextView) convertView.findViewById(R.id.RollNoTV); 
     CheckBox cb = (CheckBox) convertView.findViewById(R.id.studentCB); 
     name.setText(items[position].getName()); 
     rollNo.setText(items[position].getRollNo()); 

     if(items[position].getValue() == 1) 
      cb.setChecked(true); 
     else 
      cb.setChecked(false); 

     return convertView; 
    } 
} 

Moja ListData klasa:

package com.project.attendancemanager; 

public class ListData { 

    String name; 
    int value, rollno; 

    ListData(String name, int rollno, int value){ 
     this.name = name; 
     this.rollno = rollno; 
     this.value = value; 
    } 

    public String getName(){ 
     return this.name; 
    } 

    public int getRollNo(){ 
     return this.rollno; 
    } 

    public int getValue(){ 
     return this.value; 
    } 

} 

Wewnątrz funkcji w działalności Robię to onCreate :

Listview lv; 
ListData[] items; 
CustomAdapter adapter = new CustomAdapter(this, items); 
lv.setAdapter(adapter); 

Byłoby bardzo pomocne, gdyby ktoś mógł wskazać błąd w moim kodzie. Dzięki! Twoje zdrowie!

Odpowiedz

92

Zamiast

rollNo.setText(items[position].getRollNo()); 

należy użyć

rollNo.setText(Integer.toString(items[position].getRollNo())); 

Jeśli spróbujesz ustawić liczbę całkowitą jako tekst, należy wywołać metodę setText (int pozost) i stosowania spróbuj ustawić jako tekst niektórych zasobów ciąg z tym residem.

+0

Użytkownika String.valueOf (int); w przeciwnym razie pokazuje poniżej ostrzeżenie: Podczas wywoływania TextView # setText * Nigdy nie wywołuj Numeru # toString() do formatowania liczb; nie będzie poprawnie obsługiwać separatorów ułamków i cyfr lokalnych. Rozważ użycie formatu String # z odpowiednimi specyfikacjami formatu (% d lub% f). * Nie należy podawać literału ciągu znaków (np. "Hello"), aby wyświetlić tekst. Tekst zakodowany na stałe nie może być poprawnie przetłumaczony na inne języki. Rozważ skorzystanie z ciągów zasobów Androida. * Nie buduj wiadomości przez łączenie fragmentów tekstu. Takich wiadomości nie można poprawnie przetłumaczyć. –

+0

@NaveenKumarM Nie jestem pewien twojej odpowiedzi na pytanie. –

1

SetText robi umożliwiają całkowitą wartości

Just Add ""+ na Twój kod powinien wyglądać tak ""+rollNo.setText(items[position].getRollNo());

Ten błąd występuje, ponieważ setText nie bierze całkowitymi, to trwa strun

Powiązane problemy