【问题标题】:Android listView: NullPointerExceptionAndroid 列表视图:NullPointerException
【发布时间】:2010-09-06 13:10:37
【问题描述】:

我在列表视图中需要一点帮助。我正在生成一个列表视图,但每当我执行getChildAt(int position) 时,它都会抛出 NullPointerException。

这里是代码

_list=(ListView)findViewById(android.R.id.list);

_loadListElements();

_showListUI();

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

【问题讨论】:

  • 空指针异常仅在写入行后
  • 将代码分成多行。因此我们可以查看 _list 是否为 null,或者 getChildAt(1) 是否返回 null。
  • 实际上没有正确生成列表所有其他的东西也都在工作所以我认为列表中没有问题.....这是一个很长的代码所以我不能把它粘贴到这里.. ..对不起

标签: android list view


【解决方案1】:

如果您的子元素不超过一个,那么肯定会给您一个 NullPointerException,因为您必须在 prgramming 中从 null 开始向上计数。所以你可能想试试这个。

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

但如果没有更多代码和错误堆栈的 logcat 提取,就很难分辨。

【讨论】:

  • kkkkkk 我会尝试从 log cat 中粘贴更多详细信息,目前我不在工作场所。我想要的是在列表视图中查看单行。单击列表项时返回的相同视图??????
【解决方案2】:

在完全不知道您要实现什么功能的情况下,我不确定这些建议中的任何一个是否相关。

除了使用list.getChildAt(),您可以在您使用的任何适配器的getView() 方法中设置背景颜色吗?您将拥有视图,但我不知道您是否还有数据不知道要在哪个视图上更改背景。

从您的一个 cmets 中,听起来您想要查看刚刚单击的任何列表项。 ListActivity.onListItemClick() 中提供的视图“v”似乎应该是您想要使用的视图。

希望这两个中的一个有所帮助。

【讨论】:

  • 是的,我最初只在 getView() 中完成了它,但它没有给出预期的结果。它正在设置多行的背景。所以我想在创建列表后跳转到特定行的视图。例如 .. 在创建列表后为列表视图的第 4 行的背景着色。我还在尝试,如果我能得到一些解决方案,我会在这里发布.....感谢您的回复
【解决方案3】:

我在 OnListItemClickListener() 中尝试过,但失败了。最后,我在我的自定义适配器中对列表视图进行了一些修改。在 getView() 中,我将 clickListener 应用于我经常添加到列表中的项目。 n 在那里完成所有必需的功能。这是我的代码,我在列表 n 中添加图像视图,因此在 imageview 上应用侦听器。

getChildAt(i) 会抛出异常,因为它仅适用于可见项目-1。所以它不起作用。

我认为它会帮助那些想要在特定列表项被选中时更改颜色的人。去吧。。

在自定义Adapter的getView()中 // - - - - - - - - - - - - - - - - -代码 - - - - - - - ----------------------------------------

LayoutInflater inflater = (LayoutInflater) 上下文 .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】:

    搞定了………… 在 getView() 中,根据我的说法,它不能更早工作的原因是,

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

    这导致列表用于更新自身时出现问题......

    正确的是:if(condition) [do something]; else [恢复原状]

    这是因为我没有 else 声明我遇到了问题。

    【讨论】:

      猜你喜欢
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      相关资源
      最近更新 更多