2014-09-23 84 views
15

我使用ListView在Android中動態添加複選框。我正在使用ContextAdapter類來增加ListView。 我的錯誤日誌如下:

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類如下:

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; 
    } 
} 

ListData類:

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; 
    } 

} 

裏面我做這個活動的onCreate功能:

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

這會有很大的幫助,有人可以指出我的代碼中的錯誤。 謝謝!乾杯!取而代之的

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

回答

92

你應該使用

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

如果您嘗試設置整數文本,可以調用方法的setText(INT渣油)和應用程序嘗試設置爲文本的一些字符串資源與此resID。

+0

用戶將String.valueOf (INT);否則顯示如下警告: 當調用TextView#setText時*永遠不要調用Number#toString()來格式化數字;它不會正確處理分數分隔符和特定於語言環境的數字。考慮使用正確格式規範(%d或%f)的String#格式。 *不要傳遞字符串文字(例如「Hello」)來顯示文本。硬編碼文本無法正確翻譯爲其他語言。考慮使用Android資源字符串。 *不要通過連接文本塊來構建消息。這些消息不能被正確翻譯。 – 2016-08-05 07:40:51

+0

@NaveenKumarM我不確定你的回答與問題有關。 – 2016-08-05 08:05:37

1

的setText犯規讓整數值

只需添加""+爲您的代碼看起來像這樣""+rollNo.setText(items[position].getRollNo());

,因爲的setText不採取整數發生這個錯誤,需要字符串

相關問題