无法从列表视图中更改图像

时间:2012-03-20 03:39:37

标签: android android-listview

我在点击列表视图中的列表项时尝试更改图像。这是人们说要使用的,但它不起作用。日志文件说setimageresource行有一个空指针异常。有什么想法吗?

listview.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {

        if(arg2 == 0){
            image.setImageResource(R.drawable.lighton);
        }
            else

                image.setImageResource(R.drawable.lightoff);
    }
});

logcat的

ERROR/AndroidRuntime(712): Uncaught handler: thread main exiting due to uncaught exception
 ERROR/AndroidRuntime(712): java.lang.NullPointerException
 ERROR/AndroidRuntime(712):     at com.Sonny.HCIProject.LightSetting$1.onItemClick(LightSetting.java:42)
 ERROR/AndroidRuntime(712):     at android.widget.AdapterView.performItemClick(AdapterView.java:283)
 ERROR/AndroidRuntime(712):     at android.widget.ListView.performItemClick(ListView.java:3132)
 ERROR/AndroidRuntime(712):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:1620)
 ERROR/AndroidRuntime(712):     at android.os.Handler.handleCallback(Handler.java:587)
 ERROR/AndroidRuntime(712):     at android.os.Handler.dispatchMessage(Handler.java:92)
ERROR/AndroidRuntime(712):     at android.os.Looper.loop(Looper.java:123)
 ERROR/AndroidRuntime(712):     at android.app.ActivityThread.main(ActivityThread.java:3948)
 ERROR/AndroidRuntime(712):     at java.lang.reflect.Method.invokeNative(Native Method)
03-20 03:54:48.702: ERROR/AndroidRuntime(712):     at java.lang.reflect.Method.invoke(Method.java:521)
03-20 03:54:48.702: ERROR/AndroidRuntime(712):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
03-20 03:54:48.702: ERROR/AndroidRuntime(712):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
03-20 03:54:48.702: ERROR/AndroidRuntime(712):     at dalvik.system.NativeStart.main(Native Method)

Drawable文件夹只有图片文件

3 个答案:

答案 0 :(得分:0)

什么是图像?它在哪里?它被初始化了吗?请更多列表。

也许你应该尝试

YOUR_ACTIVITY_NAME.this.image

或者可能不是

答案 1 :(得分:0)

如果image是列表视图中的项目,那么你必须这样做:

@Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
             ImageView img=(ImageView)arg1.findViewById(R.id.image);
             img.setImageDrawable(getResourses().getDrawable(R.drawable.drawable1));
    }
});

如果它不是listview中的项目,那么如果已实例化

,则代码应该有效

答案 2 :(得分:0)

堆栈跟踪显示问题出在第42行。如果您100%确定这是第42行,

image.setImageResource(R.drawable.lighton);

然后好的。如果不是,请将第42行作为评论发布。

所以,假设那是第42行,

要么

  1. 在顶部检查您的导入 - 确保它是import my.project.R;而不是import android.R;

  2. image为空。你实例化它吗?

  3. 基本上,您要设置的内容或尝试设置的位置为null。一个或另一个,或者如果你运气不好,两者都可以。