异常和点击颜色

异常和点击颜色

mLvFoods.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
       _id = c.getString(0);
       view.setBackgroundColor(Color.BLUE);
       if(lastPosition!=-1){
           mLvFoods.getChildAt(lastPosition).setBackgroundColor(Color.WHITE);
   }
       lastPosition=position;
   }
});
case R.id.btn_delete:
   dao.delete(_id);
   c.requery();
   adapter.notifyDataSetChanged();
   lastPosition=-1;

   Toast.makeText(this,"已删除",Toast.LENGTH_SHORT).show();
   break;

此处点了一次1菜品

http://img1.sycdn.imooc.com//climg/5ecbb5c70960470404220241.jpg

这个是点击触发异常的。

E/AndroidRuntime: FATAL EXCEPTION: main

    Process: com.example.sqldemo, PID: 13412

    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setBackgroundColor(int)' on a null object reference

        at com.example.sqldemo.MainActivity$2.onItemClick(MainActivity.java:55)


1、我添加了10个之后 点前面的菜品没有问题  但是往下划,也有个菜品也变颜色了。

2、我划到ListView下面的内容(就是程序一进去时看不到的那部分),点那几个会触发异常

请问这两个怎么解决?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
提问者 __Yang 2020-05-28 03:34:35

问题解决了。

创建一个seletor

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@color/colorAccent"
       android:state_pressed="true" />//被点击
</selector>

在item最外层布局加个

android:background="@drawable/selector"

最后在item点击事件加个

view.setPressed(true);//改变颜色

结束,谢谢老师指导。

提问者 __Yang 2020-05-26 19:30:41

点了次0 再点别的菜品就会崩溃 

http://img1.sycdn.imooc.com//climg/5eccfd8709495cb904510579.jpghttp://img1.sycdn.imooc.com//climg/5eccfd9a09122a5d04940317.jpg

E/AndroidRuntime: FATAL EXCEPTION: main

    Process: com.example.sqlitedemo, PID: 17556

    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setBackgroundColor(int)' on a null object reference

        at com.example.sqlitedemo.MainActivity$2.onItemClick(MainActivity.java:60)

        at android.widget.AdapterView.performItemClick(AdapterView.java:330)

        at android.widget.AbsListView.performItemClick(AbsListView.java:1187)

        at android.widget.AbsListView$PerformClick.run(AbsListView.java:3179)

        at android.widget.AbsListView$3.run(AbsListView.java:4097)

        at android.os.Handler.handleCallback(Handler.java:907)

        at android.os.Handler.dispatchMessage(Handler.java:99)

        at android.os.Looper.loop(Looper.java:223)

        at android.app.ActivityThread.main(ActivityThread.java:7478)

        at java.lang.reflect.Method.invoke(Native Method)

        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)

        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)


好帮手慕雪 2020-05-26 09:50:43

setBackgroundColor()时view对象为空了吧。你在setBackgroundColor前,先判断一下这个对象是不是为空。祝:学习愉快

  • 提问者 __Yang #1
    不行· 我运行教案的也会出现这样的情况 我添加了10个菜品 滑到下面点击 点一次可以,第二次点另外一个就会崩溃。
    2020-05-26 19:28:17
  • 提问者 __Yang #2
    我把颜色判断去掉就不会异常了, 还是改变颜色的问题。
    2020-05-27 05:07:05
  • 好帮手慕雪 回复 提问者 __Yang #3
    这是它自身的一个bug,内容一多就会这样。别用代码控件它的颜色了,用selector更改,或者改用baseAdapter来做。
    2020-05-27 11:26:15
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.Android 网络操作与流行框架
  • 参与学习           人
  • 提交作业       220    份
  • 解答问题       1800    个

本阶段是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理;从文件存储、到轻量级数据库SQLite的使用;最后利用最流程的第三方框架助你快速开发企业级APP。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师