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
}