2014-02-17 23 views
0

所以我有一个ListView与自定义单元格中有一个EditText。我整理了一个根据请求调用的函数,它列出了每个编辑文本的所有值。所有单元格都是从静态列表创建的,而且它们都完全相同。 问题是,前7个细胞的正常工作与下面的代码,然后它崩溃:从ListView获取EditText值的工作...有时

ListView l = (ListView) CartPage.this.findViewById(R.id.cartItems); 
// total_item_count is equal to the int 11, which is how many cells there are. 
for(int i=0;i<total_item_count-1;i++){ 
    View view=l.getChildAt(i); 
    System.out.println("("+i+"/"+total_item_count+")"); 
    EditText editText=(EditText) view.findViewById(R.id.product_count); 
    String string=editText.getText().toString(); 
    System.out.println(i+": "+string); 

} 

这是我的错误日志:

02-17 06:44:17.540: E/AndroidRuntime(29086): FATAL EXCEPTION: main 
02-17 06:44:17.540: E/AndroidRuntime(29086): java.lang.IllegalStateException: Could not execute method of the activity 
02-17 06:44:17.540: E/AndroidRuntime(29086): at android.view.View$1.onClick(View.java:3617) 
02-17 06:44:17.540: E/AndroidRuntime(29086): at android.view.View.performClick(View.java:4222) 
02-17 06:44:17.540: E/AndroidRuntime(29086): at android.view.View$PerformClick.run(View.java:17397) 
02-17 06:44:17.540: E/AndroidRuntime(29086): at android.os.Handler.handleCallback(Handler.java:725) 
02-17 06:44:17.540: E/AndroidRuntime(29086): at android.os.Handler.dispatchMessage(Handler.java:92) 
02-17 06:44:17.540: E/AndroidRuntime(29086): at android.os.Looper.loop(Looper.java:137) 
02-17 06:44:17.540: E/AndroidRuntime(29086): at android.app.ActivityThread.main(ActivityThread.java:5167) 
02-17 06:44:17.540: E/AndroidRuntime(29086): at java.lang.reflect.Method.invokeNative(Native Method) 
02-17 06:44:17.540: E/AndroidRuntime(29086): at java.lang.reflect.Method.invoke(Method.java:511) 
02-17 06:44:17.540: E/AndroidRuntime(29086): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-17 06:44:17.540: E/AndroidRuntime(29086): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-17 06:44:17.540: E/AndroidRuntime(29086): at dalvik.system.NativeStart.main(Native Method) 
02-17 06:44:17.540: E/AndroidRuntime(29086): Caused by: java.lang.reflect.InvocationTargetException 
02-17 06:44:17.540: E/AndroidRuntime(29086): at java.lang.reflect.Method.invokeNative(Native Method) 
02-17 06:44:17.540: E/AndroidRuntime(29086): at java.lang.reflect.Method.invoke(Method.java:511) 
02-17 06:44:17.540: E/AndroidRuntime(29086): at android.view.View$1.onClick(View.java:3612) 
02-17 06:44:17.540: E/AndroidRuntime(29086): ... 11 more 
02-17 06:44:17.540: E/AndroidRuntime(29086): Caused by: java.lang.NullPointerException 
02-17 06:44:17.540: E/AndroidRuntime(29086): at com.venuevip.android.CartPage.updateCart(CartPage.java:305) 
02-17 06:44:17.540: E/AndroidRuntime(29086): ... 14 more 

我试图清理我的项目10个现在的时候,无济于事。

编辑:发现它只适用于屏幕上显示的项目数(所以当你把它翻转成横向和3项显示,它只适用于前3)。

+3

“CartPage.java”文件的第305行是什么?还需要发布周围的相关代码,所以我们知道你在做什么。 – nKn

+0

我的评论与原始问题无关,但我确实认为您的for-loop不正确。它应该是'for(int i = 0; i trylimits

+0

@nKn EditText editText =(EditText)view.findViewById(R.id.product_count); – DarthCaniac

回答

2
ListView l = (ListView) CartPage.this.findViewById(R.id.cartItems); 
EditText editText=(EditText) view.findViewById(R.id.product_count); 
String string; 
// total_item_count is equal to the int 11, which is how many cells there are. 
for(int i=0;i<total_item_count-1;i++){ 
    View view=l.getChildAt(i); 
    System.out.println("("+i+"/"+total_item_count+")"); 

    string=editText.getText().toString(); 
    System.out.println(i+": "+string); 

} 

声明的EditText实例外的for循环

+0

试过了,它效果很好!删除view.findViewById,并将其更改为findViewById(由于视图尚未定义),然后它工作!非常感谢! – DarthCaniac

+1

okok ... np ... bt dnt忘记... lol –

+1

查看视图= l.getChildAt(i)这一行的目的是什么?视图不被使用 – H4SN

1

你不应该重复的ListView的观点和假设,它实际上包含了列表中的每个项目一个单独的视图。它不会,ListView回收视图,并且只能在滚动时根据ListAdapter交换数据。

相反,您应该在ListAdapter中迭代数据,但这意味着您很可能不得不修改您的适配器代码,以便在编辑时将其保存在EditTexts的某个位置。