代码之家  ›  专栏  ›  技术社区  ›  viv

Android ListView:空指针异常

  •  0
  • viv  · 技术社区  · 14 年前

    我需要列表视图中的一个小帮助。我正在生成一个列表视图,但每当我执行此操作时 getChildAt(int position )它引发NullPointerException。

    这是密码

    _list=(ListView)findViewById(android.R.id.list);
    
    _loadListElements();
    
    _showListUI();
    
    _list.getChildAt(1).setBackgroundColor(Color.WHITE);
    
    4 回复  |  直到 9 年前
        1
  •  1
  •   Octavian Helm    14 年前

    如果您没有多个子元素,那么肯定会有一个nullpointerException,因为您必须在prgramming中从空开始向上计数。所以你可能想试试这个。

    _list.getChildAt(0).setBackgroundColor(Color.WHITE);
    

    但是如果没有更多的代码和对错误堆栈的logcat提取,就很难判断。

        2
  •  1
  •   John    14 年前

    如果不知道您要实现什么样的功能,我不确定这些建议是否与之相关。

    而不是使用 list.getChildAt() ,可以从中设置背景色吗? getView() 您使用的适配器的方法是什么?你会有这个视图,但我不知道你是否还有数据要知道在哪个视图上更改背景。

    从您的一条评论中,听起来您想要查看刚刚单击的任何列表项。中提供的视图“V” ListActivity.onListItemClick() 似乎这应该是你想与之合作的观点。

    希望其中一个能帮上忙。

        3
  •  1
  •   Anju Dahiya    12 年前

    我在onlistitemClickListener()中尝试过,但失败了。最后,我在定制的ListView适配器中做了一些修改。在getview()中,我经常将clickListener应用于我添加到列表中的项目。n在那里完成所有需要的功能。这是我的代码,我在其中添加了列表n中的图像视图,所以在ImageView上应用侦听器。

    getchildat(i)引发异常,因为它只在可见项-1上工作。所以它不起作用。

    我认为它可以帮助那些在选择特定列表项时更改颜色的人。去吧。

    在自定义适配器的getView()中 /——————————————————————————————————————————代码——————————————————————————————————————————————————————————————————————————————

    LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View rowView = inflater.inflate(R.layout.icon_image_layout, parent, false); ImageView imageView = (ImageView) rowView.findViewById(R.id.Icon_ImageView); imageView.setClickable(true); final int pos=position; imageView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub // TODO Auto-generated method stub try{ if(previous_view!=null) previous_view.setBackgroundColor(Color.WHITE); }catch (Exception e) { System.out.println("Exception Occurs Previous View"); } v.setBackgroundColor(Color.RED); MainActivity.imageView.setImageResource(MainActivity.Image_Name[pos]); previous_view=v; return false; } });
        4
  •  0
  •   viv    14 年前

    成功了………… 在getView()中,根据我的说法,它不工作的原因是,

    对于条件检查… 例如:如果(条件匹配)更改颜色;

    当列表用于更新自身时,这导致了问题……

    所以正确的做法是:如果(条件)【做点什么】;否则【恢复原样】

    是因为我没有别的说法,我有问题了。