android - 更改 ListView 项的文本颜色时出现 NullPointerException

标签 android listview nullpointerexception

重写getView方法改变列表项的文本颜色-

 aa = new ArrayAdapter(this,android.R.layout.simple_list_item_1, al) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = super.getView(position, convertView, parent);
           TextView tv = (TextView)convertView.findViewById(android.R.id.text1);
            tv.setTextColor(Color.WHITE);
            tv.setVisibility(View.VISIBLE);
            return view;
        }
    } ;

日志:

-Process: com.example.sairav.app3, PID: 1470
    ***java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
            at com.example.sairav.app3.MainActivity$1.getView(MainActivity.java:38)***
            at android.widget.AbsListView.obtainView(AbsListView.java:2344)
            at android.widget.ListView.makeAndAddView(ListView.java:1864)
            at android.widget.ListView.fillDown(ListView.java:698)
            at android.widget.ListView.fillFromTop(ListView.java:759)
            at android.widget.ListView.layoutChildren(ListView.java:1673)
            at android.widget.AbsListView.onLayout(AbsListView.java:2148)
            at android.view.View.layout(View.java:15596)
            at android.view.ViewGroup.layout(ViewGroup.java:4966)
            at android.widget.AbsoluteLayout.onLayout(AbsoluteLayout.java:123)
            at android.view.View.layout(View.java:15596)
            at android.view.ViewGroup.layout(ViewGroup.java:4966)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
            at android.view.View.layout(View.java:15596)
            at android.view.ViewGroup.layout(ViewGroup.java:4966)

最佳答案

第一次调用 getView 时,convertView 为 null。调用 super 并将其返回值分配给 View ,导致 convertView 未初始化,因此崩溃。

 convertView = super.getView(position, convertView, parent);
 TextView tv = (TextView)convertView.findViewById(android.R.id.text1);
 tv.setTextColor(Color.WHITE);
 tv.setVisibility(View.VISIBLE);
 return convertView;

编辑:

android.R.layout.simple_list_item_1仅包含一个 TextView , 因此为了使用 findViewById,您可以转换 super.getView 的返回值

convertView = super.getView(position, convertView, parent);
((TextView)convertView).setTextColor(Color.WHITE);
((TextView)convertView).setVisibility(View.VISIBLE);
 return convertView;

关于android - 更改 ListView 项的文本颜色时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29605493/

相关文章:

Java:NullPointerException,似乎无法找出我得到这个的原因

android - NPE 同时 inflated layout (尝试在空对象引用上调用虚拟方法 'boolean java.lang.String.equals(java.lang.Object)')

java - 在Android上播放声音

python - ListView 缺少 QuerySet。定义 ListView.model、ListView.queryset 或覆盖 ListView.get_queryset()

c++ winapi,获取 ListView 标题文本

android - Fresco : Listview showing wrong image when fast scrolling

android - SQLite SELECT MAX() 查询向游标返回空值?

android - TeamCity:配置多个构建任务以使用相同的 VCS 下载

android - 如何在 React Native Android 应用程序中使用工具栏

android - 我需要 "Android unlocked dev phone"来测试我的 android 项目吗?