Android:加载ListView时出错

Android:加载ListView时出错,android,listview,nullpointerexception,android-arrayadapter,Android,Listview,Nullpointerexception,Android Arrayadapter,我试图在我的oncreate()方法中用default colorGreen加载我的lsitview,但它在v.setBackgroundColor(color.Green)行中给了我错误 适配器类: class stableArrayAdapter extends ArrayAdapter<String> { HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();

我试图在我的
oncreate()
方法中用default colorGreen加载我的lsitview,但它在
v.setBackgroundColor(color.Green)行中给了我错误

适配器类:

class stableArrayAdapter extends ArrayAdapter<String> {

    HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();

    public stableArrayAdapter(Context context, int textViewResourceId, String [] objects) 
    {
      super(context, textViewResourceId, objects);
      for (int i = 0; i < objects.length; ++i) {
        mIdMap.put(objects[i], i);
      }
    }

    @Override
    public long getItemId(int position) {
      String item = getItem(position);
      return mIdMap.get(item);
    }

    @Override
    public boolean hasStableIds() {
      return true;
    }
    @Override
    public View getView(int position, View v, ViewGroup parent) 
    {


        if(v!= null)
                     v.setBackgroundColor(Color.GREEN);

        return v;
    } 

  }
像那样使用

View v = super.getView(position, convertView, parent);
   v.setBackgroundColor(Color.YELLOW);

如果您查看堆栈跟踪,没有提到setColor,它会在一些与内部布局相关的函数中崩溃。
这是因为在覆盖getView()之后,视图永远不会被创建。
在getView()中首先调用super.getView(),然后修改并返回其结果。


编辑:虽然您通常会覆盖getView()以扩大自定义布局,但原始海报只想更改背景颜色。调用super.getView(…)将使Android的实现放大布局,然后他可以进行小的调整。原始代码越少,原始bug越少:)

Drfine color.xml文件中的绿色值,并按如下方式使用

v.setBackgroundResource(R.color.green);
使用适配器中的
getView()
方法创建视图层次结构

在res/layout中为其定义布局,并在
getView()
中对其充气:


您要做的是将数组中的项显示为列表?Target=新字符串[]{“A”、“B”、“C”};ArrayAdapter=新的ArrayAdapter(这个,android.R.layout.simple\u list\u item\u选中,目标);setListAdapter(适配器);和该行的注释setContentView(R.layout.createtarget);请尝试上面的方法,并对stableArrayAdapter类进行注释。对于自定义适配器,需要在getview方法中为自定义视图充气。你没有那样做。另外,由于您的活动扩展了listactivity,您需要对这一行进行注释setContentView(R.layout.createtarget);。因为我不确定你想要什么,所以我发布了与评论相同的内容,这没有帮助。这不是答案。检查链接并编辑您的答案。视图有一个setBackgroundcolor方法。这里的问题是他没有在getview中膨胀任何布局,他试图在不膨胀视图的情况下设置颜色。它为空,但崩溃不在那里:)检查堆栈跟踪。他没有在getview中膨胀任何视图。所以他在getview中返回null。试试看是的。与未正确调用的setColor无关,因为他正在检查null。@SalmanLashkarara您是如何更正的。只是好奇。视图有一个setBackgroundclor方法
View v = super.getView(position, convertView, parent);
   v.setBackgroundColor(Color.YELLOW);
v.setBackgroundResource(R.color.green);
public View getView(int position, View v, ViewGroup parent) {
    if (v == null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.child_layout, parent, false);
    }
    // use v here
}