【问题标题】:Getting EditText value from ListView works... Sometimes从 ListView 获取 EditText 值有效...有时
【发布时间】:2014-02-17 11:59:49
【问题描述】:

所以我有一个带有自定义单元格的 ListView,其中有一个 EditText。我整理了一个根据请求调用的函数,它会列出每个编辑文本的所有值的漂亮列表。所有单元格都是从静态列表创建的,并且它们都完全相同。 问题是,前 7 个单元格在下面的代码中运行良好,然后它崩溃了:

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 个)。

【问题讨论】:

  • CartPage.java 文件的第 305 行是什么?还需要发布周围的相关代码,以便我们知道您在做什么。
  • 我的评论与原始问题无关,但我真的认为您的 for 循环不正确。应该是for(int i=0;i&lt;total_item_count;i++) {
  • @nKn EditText editText=(EditText) view.findViewById(R.id.product_count);
  • @trylimits 是的,你是对的!

标签: java android eclipse listview


【解决方案1】:
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);

}

在for循环之外声明edittext实例

【讨论】:

  • 试过了,效果很好!删除view.findViewById,改成findViewById(因为view还没有定义),然后就成功了!非常感谢!
  • View view=l.getChildAt(i) 这行的目的是什么?视图未使用
【解决方案2】:

您不应该迭代 ListView 中的视图并假设它实际上包含列表中每个项目的单独视图。不是,ListView 回收视图,只在滚动时根据ListAdapter 交换数据。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 2012-12-26
    • 2016-05-06
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多