Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android/Java开发:当设置在屏幕上不可见的ListView行项目时,应用程序崩溃_Java_Android_Listview_Mobile - Fatal编程技术网

Android/Java开发:当设置在屏幕上不可见的ListView行项目时,应用程序崩溃

Android/Java开发:当设置在屏幕上不可见的ListView行项目时,应用程序崩溃,java,android,listview,mobile,Java,Android,Listview,Mobile,自从我开始学习安卓以来,我遇到了一个问题 我有以下代码,当my ListView中只有较少的项目时,这些代码可以完美地工作: for (int i = 0; i < listView.getCount(); i++) { v = listView.getAdapter().getView(i, null, null); txt_flag = (TextView) v.findViewById(R.id.txt_flag); f

自从我开始学习安卓以来,我遇到了一个问题

我有以下代码,当my ListView中只有较少的项目时,这些代码可以完美地工作:

        for (int i = 0; i < listView.getCount(); i++) {
        v = listView.getAdapter().getView(i, null, null);
        txt_flag = (TextView) v.findViewById(R.id.txt_flag);
        flag = txt_flag.getText().toString();

        txt_catid = (TextView) v.findViewById(R.id.txt_catid);
        catid = Integer.parseInt(txt_catid.getText().toString());

        img_catdes = (ImageView) listView.getChildAt(i).findViewById(R.id.img_catdes);

        if(categoryid == 1){
            img_catdes.setImageResource(R.drawable.category_personal1);
        }
        else if(categoryid == 2){
            img_catdes.setImageResource(R.drawable.category_personal2);
        }

        if ("2".equals(flag)){
            chk_flag = (CheckBox) listView.getChildAt(i).findViewById(R.id.checkBox_completed);
            chk_flag.setChecked(true);
        }
    }
for(int i=0;i
但是,当ListView变得更长或更具体地说,当屏幕上不再显示ListView项目时,我总是会遇到崩溃

我非常确定设置ImageView资源和设置复选框状态的行是导致问题的原因,因为在我注释该块时不再遇到错误

请帮帮我,因为这让我晚上难以入睡-(

提前谢谢

日志:

11-08 15:16:03.450:D/AbsListView(5306):调用UnregisterListener() 11-08 15:16:03.470:D/AbsListView(5306):调用UnregisterListener() 11-08 15:16:03.590:D/dalvikvm(5306):GC_并发释放194K,25%释放8095K/10684K,暂停3ms+10ms,总计30ms 11-08 15:16:03.640:D/AndroidRuntime(5306):关闭虚拟机 11-08 15:16:03.640:W/dalvikvm(5306):threadid=1:线程以未捕获异常退出(组=0x41c50930) 11-08 15:16:03.640:E/AndroidRuntime(5306):致命异常:main 11-08 15:16:03.640:E/AndroidRuntime(5306):java.lang.IllegalStateException:无法执行活动的方法 11-08 15:16:03.640:E/AndroidRuntime(5306):在android.view.view$1.onClick(view.java:3758) 11-08 15:16:03.640:E/AndroidRuntime(5306):在android.view.view.performClick(view.java:4377) 11-08 15:16:03.640:E/AndroidRuntime(5306):在pkg.robarthsoftworks.Main.onWindowFocusChanged(Main.java:89) 11-08 15:16:03.640:E/AndroidRuntime(5306):在com.android.internal.policy.impl.PhoneWindow$DecorView.onWindowFocusChanged(PhoneWindow.java:2825) 11-08 15:16:03.640:E/AndroidRuntime(5306):在android.view.view.dispatchWindowFocusChanged(view.java:7679) 11-08 15:16:03.640:E/AndroidRuntime(5306):在android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:971) 11-08 15:16:03.640:E/AndroidRuntime(5306):在android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3328) 11-08 15:16:03.640:E/AndroidRuntime(5306):在android.os.Handler.dispatchMessage(Handler.java:99)上 11-08 15:16:03.640:E/AndroidRuntime(5306):在android.os.Looper.loop(Looper.java:137) 11-08 15:16:03.640:E/AndroidRuntime(5306):位于android.app.ActivityThread.main(ActivityThread.java:5306) 11-08 15:16:03.640:E/AndroidRuntime(5306):位于java.lang.reflect.Method.Invokenactive(本机方法) 11-08 15:16:03.640:E/AndroidRuntime(5306):在java.lang.reflect.Method.invoke(Method.java:511) 11-08 15:16:03.640:E/AndroidRuntime(5306):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 11-08 15:16:03.640:E/AndroidRuntime(5306):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 11-08 15:16:03.640:E/AndroidRuntime(5306):在dalvik.system.NativeStart.main(本机方法) 11-08 15:16:03.640:E/AndroidRuntime(5306):由以下原因引起:java.lang.reflect.InvocationTargetException 11-08 15:16:03.640:E/AndroidRuntime(5306):位于java.lang.reflect.Method.Invokenactive(本机方法) 11-08 15:16:03.640:E/AndroidRuntime(5306):在java.lang.reflect.Method.invoke(Method.java:511) 11-08 15:16:03.640:E/AndroidRuntime(5306):在android.view.view$1.onClick(view.java:3753) 11-08 15:16:03.640:E/AndroidRuntime(5306):…还有14个 11-08 15:16:03.640:E/AndroidRuntime(5306):由以下原因引起:java.lang.NullPointerException 11-08 15:16:03.640:E/AndroidRuntime(5306):在pkg.robarthsoftworks.Main.updateTestListState(Main.java:114) 11-08 15:16:03.640:E/AndroidRuntime(5306):…还有17个


对不起,你的代码很糟糕

你做了大量的
findViewById
,这需要很长的时间来操作(与其他方法相比)。使用你的
listview
do
findViewById
处理每个

静态支架
自定义适配器一起使用
,这样您就不必做大量的
查找视图ID

我建议您花一些时间学习本教程:

或者在谷歌上搜索一下
getView
holder
的工作原理

如果您仍然坚持使用您的代码,请发布您的
logcat
,以便我可以帮助您。(但我不这么做。)
推荐。)

显然,我还是一名业余android开发人员。Blaze Tama说得对,我的代码非常糟糕且效率低下。在下面的另一篇stackoverflow文章中找到了一种更好的实现方法,解决了我的问题。哇

我遇到了另一个问题,即长列表视图底部的复选框(除非向下滚动,否则在屏幕上不可见)不会更新。无论如何,请将此标记为已回答。:-)


谢谢大家的互动

谢谢你对Blaze Tama的诚实和残酷的评估,我很感激。只是想知道它为什么会崩溃。请注意我的名单